为什么NaN!=未定义?

时间:2013-04-19 13:57:30

标签: javascript variables

根据Mozilla docs

  

在数字上下文中使用时,未定义的值会转换为NaN。

那么为什么以下两个都等于真?:

NaN != undefined
NaN !== undefined

我理解Nan !== undefined因为变量类型会有所不同......

2 个答案:

答案 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转换为字符串一样,产生一个已定义的字符串值。