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

What does 'v !== v' expression check?

本文关键字:检查 表达式 什么      更新时间:2023-09-26

我在一个库的源代码中看到了这一点,并感到困惑。我认为,它总是评估为"false"。使用它有什么意义?

检查v是否为NaN:

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

来自标准:

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

为什么不直接使用内置的isNaN()

答案很简单:"isNaN()不够可靠。"。以下是isNaN()失败的情况:

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

它测试"非数字":NaN !== NaN等于true

来自MDN:

NaN的初始值为Not-A-Number,与在现代浏览器中,NaN是不可配置的,不可写属性。即使不是这样,也要避免覆盖它。

在程序中使用NaN是相当罕见的。它是返回的值当数学函数(Math.sqrt(-1))失败时,或者当函数尝试解析数字失败CCD_ 10。