Javascript 为什么南!=未定义?

Javascript 为什么南!=未定义?,javascript,variables,Javascript,Variables,根据报告: 在数字上下文中使用时,未定义的值将转换为NaN 那么,为什么以下两项都是真的呢 NaN != undefined NaN !== undefined 我能理解Nan!==未定义,因为变量类型不同。根据定义,NaN是“不是一个数字” 这并不意味着它是未定义的——它是明确定义的,但在某种意义上它不是一个数字。这是因为,根据NaN定义为: 是IEEE 754“非数字”值的数值 所以它是一个数字,而不是未定义的或空的。该值将在中进一步解释 。。。;对于ECMAScript代码,所有NaN值

根据报告:

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

那么,为什么以下两项都是真的呢

NaN != undefined
NaN !== undefined

我能理解
Nan!==未定义
,因为变量类型不同。

根据定义,NaN是不是一个数字”


这并不意味着它是未定义的——它是明确定义的,但在某种意义上它不是一个数字。

这是因为,根据
NaN
定义为:

是IEEE 754“非数字”值的数值

所以它是一个数字,而不是未定义的或空的。该值将在中进一步解释

。。。;对于ECMAScript代码,所有NaN值彼此之间都无法区分

NaN
的相等性比较定义如下:

比较x==y,其中x和y是值,生成true或false。这样的比较如下所示: 如果类型(x)为数字,则:

如果x为NaN,则返回false

如果y为NaN,则返回false

为了进行比较,您应该使用
isNaN()

isNaN(NaN)
// true
更新


+undefined
的值不是一个数字,但它仍然是一个数字(尽管有一个特殊的值),因此不是未定义的。就像将
undefined
强制转换为字符串会生成已定义的字符串值一样

因为NaN不等于任何东西,甚至不等于它自己。因此,将为其创建一个
isNaN
函数。对它进行比较毫无意义。我知道它的定义,这是mozilla文档中解释的方式:“在数字上下文中使用时,未定义的值转换为NaN。”这让我认为它是未定义的,但转换为数字…@oodavid字符串转换也是如此:)