首页 > 解决方案 > 在“你不知道 JS”一书中,我有一个关于 isNaN polyfills 的问题

问题描述

在凯尔·西姆森的书中You Don't Know JS

您还可以通过应用 NaN 不等于自身的唯一性来更简单地实现 polyfill。NaN 是世界上所有语言中唯一的值“除了 self 之外的任何值总是等于你”。

函数isNaN的polyfill提出如下。

// polyfill NaN
if (!Number.isNaN) {
  Number.isNaN = function(n) {
    return n !== n;
  };
}

但是,代码n! == n总是被迫false吗?(其实我把函数做简单执行的时候也是这样)

所以我不明白代码是什么意思。

如果您能解释一下,我将不胜感激。

标签: javascriptnan

解决方案


NaN是Javascript 中唯一的值,当它与自身比较时===,产生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


推荐阅读