根据Mozilla 文档:
在数值上下文中使用时,未定义的值会转换为 NaN。
那么为什么以下两个都等于真的呢?:
NaN != undefined
NaN !== undefined
我可以理解Nan !== undefined
为变量类型会有所不同......
根据Mozilla 文档:
在数值上下文中使用时,未定义的值会转换为 NaN。
那么为什么以下两个都等于真的呢?:
NaN != undefined
NaN !== undefined
我可以理解Nan !== undefined
为变量类型会有所不同......
NaN根据定义是“不是数字”
这并不意味着它是未定义的——它是明确定义的——而是在某种意义上它不是一个数字的未定义。
这是因为,根据ECMAScript 语言规范的第 4.3.23 节 NaN
定义为:
数字值,它是 IEEE 754“非数字”值
所以它是一个数字,而不是未定义或空值。该值在第 8.3 节中进一步解释
...; 对于 ECMAScript 代码,所有 NaN 值彼此无法区分。
第 11.9.3 节NaN
定义了与 的相等比较:
比较 x == y,其中 x 和 y 是值,产生真或假。这样的比较执行如下: 如果 Type(x) 是 Number,那么:
如果 x 是 NaN,则返回 false。
如果 y 是 NaN,则返回 false。
为了进行比较,您应该isNaN()
改用:
isNaN(NaN)
// true
更新
的值+undefined
不是数字,但它仍然是一个数字(尽管具有特殊值),因此不是未定义的。就像转换undefined
为字符串如何产生一个已定义的字符串值一样。