JavaScript中的“值不相等”是什么意思?
我在MDN文档中显示的polyfill中看到了这些代码片段:JavaScript中的“值不相等”是什么意思?,javascript,Javascript,我在MDN文档中显示的polyfill中看到了这些代码片段: // Casts the value of the variable to a number. // So far I understand it ... count = +count; // ... and here my understanding ends. if (count != count) { count = 0; } 我不知道目的是什么 事物本身怎么可能不相等呢?在JavaScript中,NaN是唯
// Casts the value of the variable to a number.
// So far I understand it ...
count = +count;
// ... and here my understanding ends.
if (count != count) {
count = 0;
}
我不知道目的是什么
事物本身怎么可能不相等呢?在JavaScript中,NaN是唯一不等于自身的值。这是对NaN的检查。这是当计数为
NaN
时的测试,因为只有NaN!=NaN
其他答案已经提到了为什么需要进行检查。但如果期望值是像NaN
这样的错误值,则有另一种方法可以指定默认值
如果您有以下情况,则不需要if条件:
count = +count || 0; // so if count = NaN which is a falsy value then 0 will be assigned.
我将试着总结已经说过的话
if (count != count) {
检查count
是否为NaN
。根据报告:
ECMAScript代码测试值X是否为NaN的可靠方法是形式为X!==当且仅当X为NaN时,结果为真
(在这种情况下,这无关紧要,但polyfill使用!=
而不是标准要求的!=
)
您可能会问,为什么不使用isNaN
?由于isNaN
不符合其名称的含义-它不检查值是否为NaN
,因此它会检查值在转换为数字时是否为NaN
。例如,“foo”
显然不是NaN
,仍然isNaN(“foo”)
将是True
。相反,isNaN([[1]])
为False
,尽管[[1]]]
不是有效数字
那么count=+count | 0
呢?这是一个有效的快捷方式,但MDN polyfills会尽可能地遵循标准。报告说:
让n成为integer(count)
在哪里
设number为tonnumber(参数)
如果数字为NaN,则返回+0
请注意,它并没有说“callisnan”,而是说“if number is NaN”,找到答案的方法是将number
与自身进行比较
另一个选项是,与全局isNaN
不同,它不强制其参数Number.isNaN(x)
当且仅当x实际上是一个NaN时才会返回true
因此,神秘的比较运算符
if(count!==count)
可以替换为if(Number.isNaN(count))
非常好的解释,但我对此很好奇。用isNaN()
方法检查它不是更好吗?那{}呢{}
?@MarcspérezGude我认为,为了防止某些浏览器没有该功能。@Jai it首先将count转换为一个数字,这样它就不能是空对象。@DenizEng好吧,窗口
确实不是一个数字,所以我认为没有问题。很好的快捷方式,但我认为OP首先对为什么会有这样的检查感兴趣。@JohnWhite事实上我在答案中有这样的检查,但因为这是别人发布的,所以我删除了它。
Number.isNaN("foo") => false
Number.isNaN([[11]]) => false
Number.isNaN(0/0) => true