垃圾js,狗都不用!
现在这段时间在学dart和flutter,来开发web/移动端APP,真的比js舒服太多了!!

- 《JS的哲学:薛定谔的类型》
· 变量类型:typeof null是"object",但null instanceof Object是false。
——JS告诉你:“我说它是它就是,不服去问Brendan Eich(JS之父)。”
· 经典等式:[] == ![] 结果是true,翻译成人话:“空数组等于非空数组,因为JS觉得你脑子可能有点空。”
- 《this的奇幻漂流》
· 普通函数:this指向调用者,除非你用了箭头函数、bind、call、apply、setTimeout、模块化……
——“this就像前任的心,你永远不知道它此刻属于谁。”
· 严格模式:你以为"use strict"能拯救你?不,它只会让this在全局变成undefined,然后冷笑:“惊不惊喜?”
- 《异步地狱:从Callback到Promise再到Async/Await》
· Callback时代:代码缩进成“金字塔”,最后发现少了一个),但错误提示在文件第1行。
· Promise的救赎:.then().then().catch()链式调用,直到你发现忘了return,然后.then()里全是undefined。
· Async/Await的背叛:写了await却忘了async,或者写了async但没await,最后发现数据没加载——页面比你的钱包还空。
- 《JS的数学课:0.1 + 0.2 ≠ 0.3》
· 浮点运算:
JS:“0.1 + 0.2 = 0.30000000000000004,这是为了提醒你——不要相信任何精确到小数点后17位的报价。”
· 解决方案:
用toFixed(2),然后发现它返回的是字符串,于是再parseFloat,最后代码比你的工资条还复杂。
- 《JS的黑暗魔法:隐式转换》
· 等式迷惑:
'5' - 3 = 2(字符串秒变数字),但'5' + 3 = '53'(数字被迫营业成字符串)。
——“+号是渣男,遇到字符串就无脑贴贴;-号是直男,只和数字玩。”
· 究极暴击:
NaN === NaN 是false,所以JS建议:“如果你觉得自己一无是处,记住——你至少不等于NaN。”
- 《模块化的千层套路》
· 上古时代:全局变量污染,var a = 1; 在另一个文件里被改成a = '我杀变量'。
· 现代救星:ES Module,但遇到循环引用时,浏览器会微笑:“您的依赖关系比甄嬛传还精彩。”
- 《JS的终极PUA:'你行你上啊'》
· 报错信息:
Uncaught TypeError: Cannot read property 'xxx' of undefined
翻译:“朕的‘xxx’呢?你代码里没写,难道要朕自己变一个?”
· 调试体验:
Console里写debugger;,结果跳过断点继续运行,Chrome安慰你:“程序员不需要调试,需要的是玄学。”
总结
JavaScript是一门“痛并快乐着”的语言:
· 痛:因为它的设计哲学是“能用就行,别问细节”;
· 快乐:当你用JSON.parse(JSON.stringify(obj))深拷贝一个对象时,会觉得自己像个天才。
(吐槽完毕,建议配合TypeScript食用,疗效更佳💊)