看板 Soft_Job 關於我們 聯絡資訊
https://www.ptt.cc/bbs/Soft_Job/M.1602985969.A.989.html 看了這篇文發現有不少人討厭 JavaScript 而我自己寫JavaScript 覺得寫起來很舒服 所以我想請大家提出 JavaScript 哪裡爛 我會試著反駁 互相交流 首先我要說 JavasSript 又稱做 ECMAScript 在近幾年演化的很快 例如 es6 增加 let, const語法 避免了 var的麻煩 promise, async await 的出現 避免了 callback hell js + JSDoc + tsc --checkJS 則是提供了強型別語言的好處 例如 type checking, documentation, 避免null dereference, code navigation 等等 而維護程式碼品質的工具 eslint, prettier 分別是 linter 和 code formatter 可以避免許多問題 而 commonjs, es module 則是補上了模組功能 在這些東西出現前 js的確是很難用 所以請大家把討論範圍限定在現代的JavaScript -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.242.67.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1604331400.A.F6D.html ※ 編輯: keev (27.242.67.104 臺灣), 11/02/2020 23:38:07
er230059: this都到處亂指XD 11/02 23:57
er230059: 其實是個人常常腦洞 settimeout忘記this會被改QQ 11/02 23:57
stopcrying: async/await 只能用在 promise 上,不能用在其他類似 11/03 00:03
stopcrying: 的結構上有點可惜 11/03 00:03
JingJing00: 能動就好爛code數量:js第一php第二python急追中 11/03 00:04
vi000246: 還要學打包工具 好麻煩 11/03 00:22
s06yji3: 要打包真的好麻煩,參數也太多太細。 11/03 00:31
fiiox3: 打包真的.....從來不覺得自己懂過XD 11/03 00:34
forewero: 不就是因為難用才那麼多檢查工具?typeof nan = num... 11/03 00:51
NaN 是 IEEE 754 (浮點數標準) 定義的一個數 在 java 和 go裡 NaN 的型別也是浮點數 而 js的 number就是 float64 這樣來看 typeof NaN === "number" 算是合理八?
newhandfun: =jpg 11/03 00:56
※ 編輯: keev (36.231.154.156 臺灣), 11/03/2020 01:29:36
GLaDOS1105: 要學的東西一堆 動不動就大更新 11/03 01:17
EPGo: typeof [] 11/03 01:28
hermes018: 喜歡 JavaScript,不過也沒寫過其他語言,也無法比較 11/03 01:44
lturtsamuel: 有沒有看過this用bind綁定成亂七八糟的值 你想要綁正 11/03 01:52
lturtsamuel: 確的反而出bug 11/03 01:52
iq1000x: 要學文內那麼多東西就是缺點啊 11/03 02:04
lturtsamuel: 文內那些東西還是很簡單的 那些也叫難你要c++工程師 11/03 02:07
lturtsamuel: 怎麼辦 11/03 02:07
cha122977: 個人觀點 難學的點是很多東西不可預期 11/03 02:08
cha122977: this很難判斷現在是誰 用+連的東西放前後不同結果 11/03 02:09
SHANGOYANYI: 太多流派造成選擇障礙症 看那精美的jQuery/ng/react/ 11/03 02:12
SHANGOYANYI: vue/vanilla以及各自衍生的套件跟生態系... 11/03 02:12
cha122977: 很多東西用到要寫個小程式測 然後幾週後就忘了 11/03 02:12
cha122977: 搞不清楚它的邏輯脈絡 搞的像要背一堆例外情況… 11/03 02:13
tsao1211: 因為大部分人js都不紮實才覺得難用 11/03 03:01
imega: 嚴格模式可避免this亂指 11/03 05:32
windclara: 有時忘記寫await,輸出不如預期花很多時間Debug才想到= 11/03 07:33
windclara: = 11/03 07:33
brianhsu: 濃縮成一句話就是例外太多,行為不一致吧! 11/03 07:36
JavaScript: 好啦! 我就是難搞...哪一次不搞滴 11/03 07:50
alihue: 天生的限制導致要各種第三方工具來打包和協助管理 11/03 07:50
alihue: 後天用第三方套件軟體協助開發,跟天生就內建的方便程度 11/03 07:53
alihue: 差太多了。 11/03 07:53
johnny055279: 就是爛才一堆框架跟延伸模組出現啊?你看看python, 11/03 08:43
johnny055279: 嘻嘻 11/03 08:43
JavaScript: 樓上想法負面,雖然難精,但是因大家喜愛才會延伸出許 11/03 08:51
JavaScript: 套件出來才對怎麼可以說是爛...嘖嘖 11/03 08:51
paint: 是不是該來註冊一下ECMAScript惹 11/03 08:58
godddddd: 名稱比java長 11/03 09:05
adsl12367: 長出太多奇奇怪怪的東西了 11/03 09:21
ssccg: java不會運算一下自己變成NaN,會是exception,NaN只是個常 11/03 09:39
ssccg: 數,跟javascript會自己冒出NaN根本不一樣 11/03 09:39
askaleroux: 套件太多派系太多 動不動就大改 第三方爛掉的套件超 11/03 09:42
askaleroux: 多 11/03 09:42
askaleroux: 寫過Go現在去寫Js感覺真是不舒服 11/03 09:45
abc0922001: 1+1=11 11/03 10:06
alongalone: 我是會推薦你去寫看看 c, C++, C# 跟 java啦.. 11/03 10:32
alihue: 忘了還有 node module 黑洞,這根本是語言缺陷導致的 11/03 10:50
odahawk: 使用浮點數的時候小數點以下是零的話就自動轉整數 11/03 11:07
aidansky0989: js不錯,比Java好寫多了 11/03 11:16
satanbaby: 語法再怎麼甜 也終究是JS 11/03 11:22
windclara: https://i.redd.it/rz3o1yibnc511.png 11/03 11:42
Gaitz: 太自由 有歷史包袱 11/03 11:53
※ 編輯: keev (36.231.154.156 臺灣), 11/03/2020 11:57:38
johnny055279: 現在是因為被定型了,重新開始誰還想用JS 11/03 12:03
johnny055279: 拜框架所賜現在才比較沒這麼多莫名其妙的問題存在 11/03 12:07
sniper2824: 笑死== 11/03 13:05
sky40280: 你都說啦,設計不良要靠一堆新的規範來強化 11/03 14:13
jinmin88: 雖然有async await, 但是一堆舊的lib沒promise版本阿 11/03 15:48
Darkword1987: 不是討厭JS 是討厭csfgsj 11/03 16:32
lachtchlee: 人家就是把它設計為弱型別的語言 免得在網絡上一再撞 11/03 16:50
lachtchlee: 牆喊暫停 它原本就不是強型別的語言(這不是它的錯) 大 11/03 16:54
lachtchlee: 可不必拿它跟ts比 這只是子集 超集的關係而已 11/03 16:57
opallin: NaN一直代表invalid number吧 是很多人會錯意以為是什麼n 11/03 17:16
opallin: on-exist 11/03 17:16
atst2: NaN是Not a Number 的縮寫。 11/03 18:04
atst2: type of NaN == “number” 不覺得語意上就有問題嗎? 11/03 18:05
askaleroux: 然後很多是typescript幫js擦屁股還有vscode的extensi 11/03 18:48
askaleroux: on 你是多菜覺得linter formatter內建在js 11/03 18:48
jj0321: 搜尋 javascript meme 那些就是我的困擾 11/03 19:58
samioplg: 今天寫ng event.target.value幫我把number 轉成string 11/03 20:08
samioplg: 找了半小時,幹 11/03 20:08
panbanana: this都亂指,arrow function 跟一般的function 又不一 11/03 20:08
panbanana: 樣了 11/03 20:08
MyNion: JavaScript就是個拉基語言,會覺得它有趣或優美的人 11/03 21:54
MyNion: 大概沒有接觸過其他有「嚴謹邏輯」的語言 11/03 21:54
chatnoir: this 沒有亂指, 是你沒有好好了解過他.. 11/03 22:23
netburst: js不錯,比Java好寫多了 11/03 22:23
CoNsTaR: @某L 就是因為弱型別才會在執行期“撞牆喊停”吧 11/03 22:40
CoNsTaR: 你看過哪個 Haskell 或 Agda 程式跑到一半跟你講發生“ 11/03 22:40
CoNsTaR: 例外”的?快笑死 11/03 22:40
CoNsTaR: 例外處理本身就是個弱智的想法 11/03 22:40
CoNsTaR: 在電腦的世界所有的值都是可預期的,才沒有所謂的“例外 11/03 22:40
CoNsTaR: ” 11/03 22:40
CoNsTaR: 會有例外除非你 RAM 滿了,CPU 燒掉了,硬碟故障了... 11/03 22:40
CoNsTaR: @某 opa,所以 NaN 到底是不是 Number? 11/03 22:48
CoNsTaR: 如果一個函數跟你講它會回傳給你一個數字,結果給你一個 11/03 22:48
CoNsTaR: NaN 你有什麼感想 XDDD 11/03 22:48
CoNsTaR: 幹嘛不一開始就好好寫好 f : Num n Maybe n 11/03 22:48
CoNsTaR: 或 f() -> Option<N> where N: Num 呢? 11/03 22:48
CoNsTaR: * f : Num n => Maybe n 11/03 22:59
CoNsTaR: 不能用 unicode 符號? 11/03 22:59
x246libra: JS 太自由 沒規範 動態又弱型別 覺得好寫的 不是高手 11/03 23:13
x246libra: 就是新手 一般程式的程度 都會覺得很多莫名例外要背.. 11/03 23:14
guitarcho: Swift 歡迎你 11/04 03:19
oao1002: 求別更新了...老子學不動了... 11/04 07:42
max241: 看完推文 感覺就是常見的不懂xxx 就說xxx不好用 難用 ㄏㄏ 11/04 10:06
strlen: 難用就是難用 懂了還是覺得難用 垃圾還有人要護航 今天是 11/04 13:38
strlen: 沒辦法大家被逼著用 不然滿大街的JS加強版是哪來的?不就 11/04 13:39
strlen: 是JS太垃圾太難用? 11/04 13:39
dreamnook: js的優勢是跑在browser上 很會能看到效果 11/04 14:55
dreamnook: 然後就(誤 11/04 14:55
dream1124: 推 strlen。說出我發文的心情。北七的東西就別再護航了 11/04 15:50
superpandal: 很少 個人不喜歡類型 有了類型就要拋錯 方程處理數據 11/04 16:18
superpandal: 足夠了 能夠講的大概就寫起來太醜 不過這還是得看人 11/04 16:19
nh60211as: 不是吧,沒有型別就不會有型別錯誤的意思嗎 11/04 16:21
superpandal: 當然會有錯 但你需要定位所有錯誤的原因嗎? haha 11/04 16:30
v7q4: 純Javascript沒問題,有問題的是那些有的沒的框架 11/04 19:29
dream1124: 要不要拋錯是可以透過語言的規格設計去改變做法的 11/04 19:45
dream1124: 但一個高階語言一開始不提供機制給人宣告型態 11/04 19:46
dream1124: 後面再用文件或註解去補往往就悲劇了 11/04 19:47
dream1124: 一不小心就是整個社群一堆雜七雜八難懂的標準 11/04 19:47
dream1124: 更別提你不想安排所有錯誤的處理對策不代表一個都不做 11/04 19:49
dream1124: 更不代表像 js 那樣還會自動幫你轉型或進行一堆運算 11/04 19:50
dream1124: 這麼不愛型態怎麼不去寫 Assembly 啊 11/04 19:51
superpandal: 給你型態 會寫的如同亂碼的一樣很難懂 方不方便維護 11/04 21:42
superpandal: 與有沒有型態根本是兩件事情 確實有錯誤需要處理 但 11/04 21:42
superpandal: 主要錯誤才是重點吧 只能說這是每個人的選擇 11/04 21:43
hanklgs: null >= 0 11/04 21:58
ruthertw: js抄書隨便亂兜,就可以擔任總經理,你說這語言嘿 11/05 08:40
ruthertw: 台灣眾多小型公司慣老闆超愛js,覺得此語言萬能 11/05 08:42
strlen: 就是純JS問題一大堆 才發明出那些有的沒的框架吧? 11/05 23:16
CoNsTaR: @superpandal 沒給型態才像亂碼好嗎 11/06 08:49
CoNsTaR: f = \x y. x $ map g y 11/06 08:49
CoNsTaR: 請問你要花多少時間確認怎麼用 f 和 f 回傳的東西? 11/06 08:49
CoNsTaR: 或甚至是確認上述程式是不是正確的? 11/06 08:49
CoNsTaR: 如果我告訴你它的 type 是 11/06 08:49
CoNsTaR: f : (List String -> String) -> List Integer -> String 11/06 08:49
CoNsTaR: 不用兩秒,你大概連 g 是做什麼的都猜到了吧 11/06 08:49
superpandal: 這是你定的? @_@ 11/06 14:53
superpandal: 只能說這就是人生 總經理... 好遙遠的位置 11/06 14:54
ssdoz2sk: NaN === NaN // false | WTF? 11/10 13:08
dryadd44651: 很簡單的道理我寫python可以完全專心在我要做的事情 11/19 14:58
dryadd44651: 上 11/19 14:58
dryadd44651: js注意力都在找bug 跟個白癡一樣 11/19 14:58
dryadd44651: 為什麼要浪費生命 11/19 14:58
justben: 回到這篇創始戰文打個卡 11/23 16:53
imjeffreylee: Js bug超多的啊... 01/09 21:42
jen1121: 文法雜亂 01/16 23:01