根据Mozilla docs:
在数字上下文中使用时,未定义的值会转换为NaN。
那么为什么以下两个都等于真?:
NaN != undefined
NaN !== undefined
我理解Nan !== undefined
因为变量类型会有所不同......
答案 0 :(得分:12)
根据定义,NaN “ 非数字 ”
这并不意味着它未定义 - 明确定义 - 但在某种意义上未定义不数字
答案 1 :(得分:2)
这是因为,根据Section 4.3.23 of ECMAScript Language Specification NaN
定义为:
数字值是IEEE 754“非数字”值
所以这是一个数字而不是undefined或null。该值在Section 8.3
中进一步解释...;对于ECMAScript代码,所有NaN值都无法区分。
Section 11.9.3中定义了与NaN
的平等比较:
比较x == y,其中x和y是值,产生true或false。这样的比较如下进行: 如果Type(x)是Number,则:
如果x是NaN,则返回false。
如果y是NaN,则返回false。
为了进行比较,您应该使用isNaN()
代替:
isNaN(NaN)
// true
<强>更新强>
+undefined
的值不是一个数字,但它仍然是一个数字(尽管有一个特殊值),因此不是未定义的。就像将undefined
转换为字符串一样,产生一个已定义的字符串值。