在Kyle Simson的书You Don't Know JS
中,
您还可以通过应用NaN不等于其自身的唯一性来更简单地实现polyfill。NaN是世界上所有语言中的唯一价值,“自我以外的任何价值都永远等于您。”
函数isNaN的polyfill建议如下。
// polyfill NaN
if (!Number.isNaN) {
Number.isNaN = function(n) {
return n !== n;
};
}
但是,是否总是将代码n! == n
强制设为false
? (实际上,使函数简单并执行它是相同的)
所以我不明白代码的含义。
如果您能解释一下,我将不胜感激。
NaN
是Javascript中的only值,当与===
与它自身进行比较时,会产生false
(或等效地,与!==
进行自身比较时,会返回true
)。使用===
对其自身进行检查时,其他任何值都将返回true
。
NaN !== NaN // true
const obj = {};
obj !== obj // false
0 !== 0 // false
'foo' !== 'foo' // false
// etc, everything else other than NaN
// will produce: // false
所以
return n !== n;
是对n
是否为NaN
的可靠检查。