在某些情况下,我发现(NaN == NaN)是假的。怎么会发生?

时间:2015-01-27 06:56:23

标签: javascript

在这种情况下,我发现NaN == NaN是假的。我不明白为什么会发生这种情况,因为类型和数值都相同。那怎么可能。

4 个答案:

答案 0 :(得分:1)

将此视为NaN UNKNOWN 所以,

  

UNKNOWN永远不会与另一个相同   UNKNOWN .... UNKNOWN(NaN)== UNKNOWN(NaN)// false

另一个例子:

  

让我们说x =' a',y =' b'两者都不是数字,因此x = NaN,y = NaN但x!= y

http://es5.github.io/#x11.9.6

http://en.wikipedia.org/wiki/IEEE_floating_point

浮点数的IEEE 754规范(所有语言都用于浮点数)表明NaN永远不会相等。

答案 1 :(得分:1)

NaN's在设计上永远不会相等。

Math.log(-1) is NaN

Math.log(-2) is NaN

这是否意味着Math.log(-1) == Math.log(-2)

答案 2 :(得分:0)

NaN&#39>是不寻常的情况。它们不等于任何东西(对自己也是如此)。

因此,当您测试NaN==NaN时,它会返回false。

要测试NaN,您可以使用@Bergi评论:

var x = NaN;
if(x !== x){
  console.log('It is NaN');
}

答案 3 :(得分:0)

Nan - JavaScript多么美好的案例。

  

针对NaN进行测试

     

等式运算符(==和===)不能用于测试值   NaN的。使用Number.isNaN()或isNaN()代替。

  NaN === NaN;        // false 
  Number.NaN === NaN; // false 
  isNaN(NaN);         // true 
  isNaN(Number.NaN);  // true