为什么说NaN不等于NaN,难道就是因为语法规定吗
定義NaN不等於NaN是非常合理的, 反過來會有更多麻煩, 比如parseInt("a")和parseInt("b")會相等
NaN不是一个数字所以他肯定不等于NaN
NaN = not a number.
例:
'S'不是一个数字吧,
'B'也不是一个数字.
'S'=='B'成立吗...
What is the rationale for all comparisons returning false for IEEE754 NaN values?里,IEEE委员会的一个成员给出了解释(在文中第二个黄色背景的段落),即NaN诞生初期所受到的计算机软、硬件的制约:
当初,还不存在isnan()
函数(文中采用的是更广泛的"predicate(谓词)")。那么,如果遇到变量为NaN
该怎么办?
文中说:"... computation would be best stopped rather than continued for an indefinite time to an Indefinite conclusion"。
我推断,当时那么简陋,估计也不存在什么错误处理机制;一切都靠条件判断进行流程控制。而为了在遇到NaN
时停止运行,只能让原本正常通过的条件判断"x == x"变得不通过。于是,计算机领域的一大奇闻就此诞生。
你可以理解为语法规定
NaN = not a number
NaN
就是not a number
的意思,相当于一个描述性的变量,不存储内容。因此NaN != NaN