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/cn.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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP