Javascript typeof和IsNaN

时间:2018-02-25 17:46:06

标签: javascript arrays polyfills

Array.prototype.includes()的{​​{3}} polyfill函数中,我找到了以下代码。

function sameValueZero(x, y) {
    return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}

在上面的代码中 typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y)这让我感到困惑。如果typeof变量是一个数字,isNaN总是假的吗?那么这整个情况何时会恢复正常?有人可以解释或我是否理解错了?

2 个答案:

答案 0 :(得分:1)

在JavaScript中,NaN的类型为number。我想这是因为它是数学运算的结果。

有关详细信息,请参阅this question

答案 1 :(得分:0)

如果2个元素为true,则此代码将返回NaN,如果两个元素都不是数字,则返回false

如您所见,第一个示例返回true同时为isNaN(),无论其类型如何 - 这使得a等于b。在使用isNaN()之前,第二个检查两者是否为数字:



const checkEq1 = (x, y) => isNaN(x) && isNaN(y)

console.log(checkEq1(NaN, NaN)); // true

console.log(checkEq1('a', 'b')); // true - error

const checkEq2 = (x, y) => typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y)

console.log(checkEq2(NaN, NaN)); // true

console.log(checkEq2('a', 'b')); // false