NaN !== NaN。这是JavaScript里唯一一个连自己都不认的值。
1995年Brendan Eich写第一版JS时,直接抄了IEEE 754浮点标准。这个标准规定"非数字"必须不等于自身——本意是区分"无穷减无穷"和"零除零"等不同错误场景。Eich后来回忆:「我当时觉得IEEE的人肯定比我懂,就没多想。」
结果这个设计成了新手噩梦。你写console.log(NaN === NaN),返回false。用Array.prototype.indexOf查NaN,永远找不到。ES2016被迫补了个Number.isNaN()来擦屁股。
Stack Overflow上关于NaN的问题超过4.2万个,每年还在新增。Reddit上有人吐槽:"我教JS三年,这是学生唯一需要'因为历史原因'来记住的规则。"
TC39委员会多次讨论要不要修,结论都是"破坏现有代码的成本太高"。29年过去了,这个bug成了语言的一部分。你只能用Number.isNaN()或者Object.is()来绕过——后者是ES2015专门给NaN开的后门。
上周一个前端面试帖火了:面试官问"怎么判断一个值是NaN",候选人答了六种方法。最高赞评论是:"能问出这题的公司,建议快跑。"
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.