Soft_Job 板


LINE

由於 Strong Type + OOP 寫起來心裡踏實,我平常工作還是習慣 TS > JS, JavaScript 有它的缺點嗎?當然有,每個語言都能被挑出一些毛病, 但我們得先做出區別,什麼是真正的「缺點」,什麼是「你不了解」。 dream1124 大提出的一點我深有同感: JavaScript 明明有 try statement、有 throw、也可以定義 exception type, 但卻不像 JAVA 一樣可以做 multiple exception,如果要辨別是哪個 exception, 就只能蹩腳地使用 "instance of",這確實造成許多開發上的不便。 (目前 proposal 裡面也沒看到未來有打算支援,如果有的話麻煩提點) 再來是 JavaScript 的 Date 廢到笑,也是被大家詬病的地方,讓 moment.js 幾乎必備 , (就像 PHP 的 Carbon) 目前有一個叫作 temporal 的 proposal 已經在 stage 2 討論中, 它提供更現代的 Date API,相信之後能夠被改善。 這些確實是語言的缺點,提出這些缺點能夠帶來正向討論, 這也是目前 EMCA 的 TC39 正在做的事情: 你覺得這語言哪裡還可以增強,提出來大家討論,如果有共識就寫進 Spec - 再來討論「你不了解」,你覺得: true == 1 > true true === 1 > false 這兩行很可笑,只是代表你不懂 JavaScript,這種 meme 在網路社團看到會覺得好笑, 但完全無助於討論,這只是因為兩個等號會觸發隱含轉型,三個等號不會, 而這些規範全部都寫在 ECMAScript Spec 裡面。 為什麼 91 - "1" = 90? 因為 "+" 運算子的演算法步驟中,只要左右有一邊是字串,就對雙方做 ToString, 而 "-" 運算子少了這個步驟。 https://www.ecma-international.org/ecma-262/11.0/index.html#title 為什麼 "+" 運算子要多這一步,Spec 上面也跟你說了: 「加法運算子同時具備字串串接與數值相加的功能。」 我不知道開發 JavaScript 的人有沒有看過 Spec,但我希望如果你已經理解語法了, 你可以花時間看看這份 Spec,會讓你對這個語言有更多瞭解,對開發的幫助很大, 隱含轉型你只要熟悉它的規則,就能減少冗長的程式碼,提高易讀性, 在最高的支援度下,新的語法你更要會,像是 ES6 加入很多方便的 Array 方法, 能夠省去不少實作的時間。 JavaScript 很好學,但也有一些歷史共業留下來的 pitfall (像是那該死的 typeof), 因為它主要的環境是在瀏覽器上,比起其他語言它更不能做一些破壞向下支援的改動, 舉例來說:剛剛我們提到 Temporal 完全是 Date 的威力加強版, 但它能把 Date 拿掉嗎 XD?完全不可能,於是 Date 成為下一個歷史共業。 試著更加理解 JavaScript,避開 Pitfall,就能寫出更高品質的程式碼 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.214.175 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1604379138.A.04F.html
1F:推 lturtsamuel: 多寫幾個toString vs 被奇怪的隱式轉型嚇到 我選前者11/03 12:55
※ 編輯: kusakawa (1.169.214.175 臺灣), 11/03/2020 12:59:08 如果每個都要寫 toString 的話,那好像還是轉到 strong-typed 比較快 XD,哈哈, JavaScript 的隱含轉型其實並不奇怪,數來數去也就 ToString, ToNumber, ToBoolean 這幾個比較主要而已。 ※ 編輯: kusakawa (1.169.214.175 臺灣), 11/03/2020 13:06:40
2F:→ jobintan: TypeScript表示安定…11/03 13:14
3F:→ strlen: 看這些spec一點意義也沒有 浪費時間記那些例外和隱含轉型 11/03 13:43
4F:→ strlen: 還不如強型別 把心思花在商業邏輯上11/03 13:43
哎呀我只是寫程式的,我們關注的點不一樣而已啦。
5F:推 ChangeXD: 菜鳥如我看你們爭論的時候拿筆記一直抄11/03 13:58
6F:推 winniekuma: 拿spec當大招放真的挺趣味 11/03 13:58
winnie 大,我的意思不是把 spec 丟在桌上然後指責大家亂罵 JavaScript, 我覺得大家好像買了 JavaScript 牌的電器,然後用過去使用他牌電器的經驗來操作它, 雖然它會動,但一定還是覺得哪裡怪怪的,怎麼預期行為跟過去的經驗抵觸。 其實這個問題可以從「看說明書」去解決,Spec 裡面不只記載演算步驟,時常也有記載 為什麼要這樣做的 note。 ※ 編輯: kusakawa (1.169.214.175 臺灣), 11/03/2020 14:07:14
7F:推 vi000246: "你只要熟悉它的規則,就能減少冗長的程式碼"11/03 14:24
8F:→ vi000246: 換句話說 很容易接手前人寫的爛扣 或是合作的人寫爛扣11/03 14:24
不遵守規範的 code 淪為爛 code 只是時間問題,沒經過 PEP 8 跟 LINT 的 Python cod e 一樣很糟,無論什麼程式語言都需要規範,都需要 pattern。
9F:推 WTFCN: 推樓上,TS再好都還是會有人把變數通通宣告為any 11/03 14:31
※ 編輯: kusakawa (1.169.214.175 臺灣), 11/03/2020 14:36:09
10F:→ cha122977: 雖然+/-的不同是因為字串能用+來接 但這設計真的很糟 11/03 15:02
11F:→ ericrobin: 就是很多人覺得這些規則鳥才說他缺陷阿= = 11/03 15:02
12F:→ cha122977: 因為直覺上會認為+-*/會有類似行為 11/03 15:03
13F:→ cha122977: 但實際上+就是一個特例 所以才要特別寫在spec解釋 11/03 15:03
14F:→ cha122977: 別的語言通常直接讓-*/不能用在字串 就省去這方面問題 11/03 15:04
15F:推 cooper6334: 這些楣楣角角就是坑阿, 11/03 15:56
16F:→ askaleroux: 人家+-沒問題 就你js問題最多 這不就坑? 11/03 18:51
17F:推 alihue: 算把 spec 寫爛了 11/03 18:53
18F:推 wulouise: 一堆方便帶來不方便 11/03 19:02
19F:→ vi000246: 把bug寫進spec就變feature了 11/03 19:05
20F:推 iq1000x: 可是true+true+true===3 11/03 19:39
21F:推 panbanana: moment.js 現在已經.... 11/03 20:12
22F:→ dreamnook: 現在都不太用moment.js了 太肥… 11/03 20:42
23F:推 handsomeburg: 推推,用弱型別語言嫌它不是強型別是怎樣? 11/03 20:48
24F:推 netburst: 11/03 22:28
25F:噓 CoNsTaR: 看到“例外處理”、“隱含轉型”什麼的還講得頭頭是道必 11/03 23:08
26F:→ CoNsTaR: 須噓 11/03 23:08
27F:推 opallin: 不用解釋吧 反正拿不拿spec出來講都會有人酸 11/03 23:10
28F:噓 CoNsTaR: 弱型別、OO 到 2020 還存在本身就是一個 shame 11/03 23:11
29F:→ crazylunar: 感覺就是我坑都寫在spec了,摔進去就不干我的事一樣 11/04 00:20
30F:推 newhandfun: 把bug寫進spec就變feature了+1 11/04 00:54
31F:噓 s06yji3: 我也覺得是把缺陷寫進spec當做features... 11/04 01:07
32F:推 internetms52: 推前幾樓,把bug寫進spec... 11/04 08:11
33F:推 brianhsu: 把缺陷寫近 SPEC,他還是缺陷。C 語言用非零和零當作 Tr 11/04 10:31
34F:→ brianhsu: ue / False 也是在 SPEC 內,但他一樣是缺陷。 11/04 10:31
35F:→ EPGo: moment.js 已停止更新,很久前就改用輕量的 day.js 11/04 13:24
36F:→ strlen: It's not a bug; it's feature. 11/04 13:37
37F:→ superpandal: 確實不難了解的東西 11/04 16:48
38F:→ wulouise: 看起來JS比C++好太多了,C++都馬是說這個UB我不管 11/04 20:22
39F:→ wulouise: JS還有定義這是spec,感恩 11/04 20:23
40F:→ superpandal: 看來確實很多c/c++的會用js 現在js效能也不錯 11/04 21:46
41F:→ viper9709: 推一樓 11/05 00:47
42F:推 abraxas: 雖然說明書可以解決問題,但不是只要寫到說明書就合理了 11/05 12:38
43F:推 su321752a: 只能推了 11/08 18:50







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP