Re: [讨论] 请大家聊聊 JavaScript的缺陷

楼主: dream1124 (全新开始)   2020-11-03 09:46:21
※ 引述《keev (a)》之铭言:
: 而我自己写JavaScript 觉得写起来很舒服
: 所以我想请大家提出 JavaScript 哪里烂
你喜不喜欢是一回事,但尽管我天天写 ts 仍觉得 js 真的比较烂啊~
: 在近几年演化的很快
: 例如 es6 增加 let, const语法
这可以说是近年最有用的功能了… 还好有它们不然事情更麻烦
: promise, async await 的出现
: 避免了 callback hell
认真说来这是异步作业都要面对的议题,不是 js 自己的问题,
但小吐槽一下,promise 只是函式库… 请不要跟语言混为一谈。
async、await 才是语言功能,但那是你 promise 用太凶而顺势衍生出的工具,
不是因为有什么前瞻的见解而发展出来的功能。
另外值得一提的是…
既然现在人们把 js 当通用语言来用,也开发服务器端的程式,
那处理到可能发生多种例外的作业,好比说 I/O 时,
你们难道不觉得没有 throws 语法给开发者事先声明函式的使用者可能会面对的例外是一项缺陷?
这样对于使用者来说,他不就要事先看一堆文件才会知道应该设想好哪些问题的对策?
难道有可能发生错误的函式你通通都要靠 promise 来回报吗?
这样应该比较浪费内存空间吧?
还是你觉得只要靠一两个高层次的 try catch 统一补捉各式 error,
然后再层层呼叫多个函式善后就好?
你这次要再靠 JSDoc 于程式码的外部声明例外状况来缓解这项问题吗?
(有空去看看这篇文章吧 https://www.yinwang.org/blog-cn/2017/05/23/kotlin )
: TypeScript + JSDoc + vscode
: 则是提供了强型别语言的好处
: 例如 type checking, documentation, 避免null dereference, code navigation 等等
这段是吸引我回文的点
不好意思喔,这些都是 typescript、vscode 的功劳,跟 javascript 无关。
你在用的是 typescript,javascript 仍旧是破破的,请不要帮它揽功。
其他 C-like 通用语言早就可以提供型态资讯给编译器,
也陆续都可以协助检查 null pointer 的问题,
拿这些功能出来说嘴只是让人觉得像是国中生跟大人强调自己已经不是小孩了。
如果你 js 专案不加入 tsconfig,或著不透过文字编译器、 IDE 提供的机制
向他们说明程式执行环境的资讯,那各类工具支援都难以做得很精准到位。
Facebook 为了解决型态问题还发展出 propTypes 这种鬼东西欸,我看了只觉得呵呵
: 而维护程式码品质的工具 eslint, prettier
: 分别是 linter 和 code formatter
: 可以避免许多问题
嗯,已知用火…
: 而 commonjs, es module 则是补上了模组功能
: 在这些东西出现前 js的确是很难用
: 所以请大家把讨论范围限定在现代的JavaScript
好啦好啦,你终于长大,已经不是小孩子囉~
你是未来世界的主人翁~ 乖哦~
作者: hegemon (hegemon)   2020-11-03 10:14:00
笑死,在蛇蛇圈也是有已知用火的感觉
作者: alihue (wanda wanda)   2020-11-03 10:15:00
推推
作者: stopcrying (卖考)   2020-11-03 10:16:00
可惜 ts 的 union type 没有好用到可以取代 exception
作者: maik060 (^.< 啾咪 ~)   2020-11-03 10:36:00
漂亮
作者: newhandfun (新手方)   2020-11-03 10:49:00
很精辟
作者: angusyu (〒△〒)   2020-11-03 10:58:00
各位观众,新一代鄙视链已出现!
作者: windclara (null)   2020-11-03 10:59:00
感谢TS,不然开发前端面对JS真心痛苦
作者: vi000246 (Vi)   2020-11-03 11:15:00
说ES6很棒 但是还要打包 考虑不同浏览器行为
作者: keev (a)   2020-11-03 11:15:00
promise 是语言的一部分 写在规格里
作者: kusakawa (草川)   2020-11-03 11:39:00
promise 是函式库??定义在 ECMAScript Spec 里面的是函式库??
作者: tsao1211 (Sunday)   2020-11-03 11:44:00
半瓶水响叮当 看到promise那段就懒得看了
作者: chatnoir (对不起)   2020-11-03 11:51:00
用ts鄙视js XDDDDpromise不是物件吗? 囧
作者: vi000246 (Vi)   2020-11-03 11:53:00
可是IE不支援promise捏 订在spec 浏览器不支援还要绕一圈 似乎不太方便
作者: kusakawa (草川)   2020-11-03 11:56:00
楼上不觉得这听起来像是 IE 的问题吗?
作者: vi000246 (Vi)   2020-11-03 12:00:00
如果公司要你支援IE 那就变成RD的问题了
作者: lturtsamuel (港都都教授)   2020-11-03 12:06:00
你不想要 exception,go rust c欢迎你除了ocaml系列语言 rust kotlin 其他人说要避免空指针解引用我都当笑话
作者: WTFCN (WTFCN)   2020-11-03 12:35:00
笑死
作者: jobintan (Robin Artemstein)   2020-11-03 13:13:00
我用react都用tsx取代jsx,ts真的建议去学一下。
作者: tz5514 (屁安)   2020-11-03 13:45:00
2020 年还在说 promise 只是函式库不是语言特性 如果不是平行时空就是时空旅人
作者: soccer103 (Ferrari)   2020-11-03 18:37:00
Promise 是函式库?
作者: dreamnook (亚龙)   2020-11-03 20:41:00
typescript写起来真的颇舒服
作者: fantasystar (小光先生)   2020-11-03 22:13:00
promise/async/await 的部分讲错了 = =
作者: viper9709 (阿达)   2020-11-04 00:30:00
作者: superpandal   2020-11-04 16:27:00
个人觉得有错直接回传状态 再由其他函数处理比较好
作者: sharku (明珠求瑕)   2020-11-05 21:04:00
推ts
作者: strlen (strlen)   2020-11-05 23:16:00
推TS就是证明JS就是个垃圾

Links booklink

Contact Us: admin [ a t ] ucptt.com