JavaScript中比较NaN值的相等性

76

我需要在Javascript中比较两个数值是否相等。这些值可能是NaN

我想到了以下代码:

if (val1 == val2 || isNaN(val1) && isNaN(val2)) ...

代码目前可以正常运行,但我觉得它太臃肿了。我想让它更简洁。有什么建议吗?


8
在没有加括号的情况下混合使用 ||&& 是非常丑陋和令人困惑的。 - ThiefMaster
12
NaNNaN 应该被认为是不相等的,因为例如 0/0parseInt("not a number!") 虽然它们两个都求值为 NaN,但不应被视为相等。 - Peter Olson
2
@Peter 有时这种差异对算法来说是无关紧要的。我认为这是 OP 的情况。 - drigoangelo
12个回答

-1
为什么不使用这样的if语句呢?
if (isNaN(x) == true){
        alert("This is not a number.");
    }

这并没有回答问题。 - trincot

-1
发现了另一种使用 Array.prototype.includes MDN 链接 的方法。显然,[NaN].includes(NaN) 对于 NaN 返回 true。
function IsActuallyNaN(obj) {
  return [obj].includes(NaN);  
}

或者我们可以选择davidchambers的解决方案,这个方案更加简单。

function IsActuallyNaN2(obj) {
  return obj !== obj;
}

当你在SO上写答案时,尽量给你的代码提供一些解释。 - Touheed Khan
不要仅为此构造一个数组文字。如果您想使用ES6方法,请使用Object.is(obj, NaN) - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接