'v!== v'表达式检查是什么?

问题描述:

我在一个lib的源代码中看到了这个,并且感到困惑。我认为,它总是评估为'false'。使用它的意义是什么?'v!== v'表达式检查是什么?

它检查v是否NaN

if(v !== v){ 
    //'v' is NaN here 
} 

standard

为ECMAScript的代码来测试一个值是否X是NaN一个可靠的方法是如下形式的表达X!== X.当且仅当X是NaN时,结果才为真。

为什么不只是使用内置的isNaN()

答案很简单:“isNaN()不够可靠。”。这里有情况下,当isNaN()会失败:

isNaN("NaN")   //true 
isNaN(undefined)  //true 
+0

显然,这样做在ES6方式是'Object.is(OBJ,NAN)':http://wiki.ecmascript.org/doku.php ?id = harmony:egal – 2012-07-11 10:25:51

+0

@OttoAllmendinger相当有趣。感谢您的信息。 – Engineer 2012-07-11 15:27:20

它测试“不是一个数字”:NaN !== NaN等于true

MDN

楠初始值不是一个数 - 一样的 数的值。 NaN的。在现代浏览器中,NaN是不可配置的, 不可写属性。即使情况并非如此,请避免 覆盖它。

在程序中使用NaN相当罕见。当数学函数失败(Math.sqrt(-1))或尝试对 解析数字的函数失败时,返回值为 (parseInt("blabla"))