首先,我要提一提,我知道如何isNaN()和Number.isNaN()工作.我正在阅读David Flanagan的The Definite Guide,他给出了一个如何检查值是否为例子的例子NaN:
x !== x
Run Code Online (Sandbox Code Playgroud)
这将导致true当且仅当x是NaN.
但现在我有一个问题:他为什么要使用严格的比较?因为它似乎
x != x
Run Code Online (Sandbox Code Playgroud)
表现方式相同.是否可以安全使用的两个版本,或我很想念在JavaScript中的一些值(S),将返回true的x !== x和false为x != x?
相关的IEEE标准定义了一个数字常量NaN(不是数字),并规定NaN应该比较为不等于它自己.这是为什么?
我熟悉的所有语言都实现了这个规则.但它经常会导致严重的问题,例如当NaN存储在容器中时,NaN存在于正在排序的数据中等时的意外行为等.更不用说,绝大多数程序员都希望任何对象都等于自身(在他们了解NaN之前,令人惊讶的是他们增加了错误和混乱.
IEEE标准经过深思熟虑,因此我确信NaN的比较与其本身相同是很糟糕的.我只是想不通它是什么.
我偶然发现了这个Array.prototype.includes的polyfill. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes.是否有理由在第21,22行将变量与自身进行比较?
if (searchElement === currentElement ||
(searchElement !== searchElement && currentElement !== currentElement)) {
return true;
}
Run Code Online (Sandbox Code Playgroud) 我在JavaScript采访中被问过
如果
x!=x是TRUE,可能的类型是x什么?
面试官告诉我,只有一种可能的类型x可以得到这个结果.