在Javascript中比较NaN值是否相等

我需要在Javascript中比较两个数值的相等性。 值也可以是NaN 。 我已经拿出这个代码:

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

这工作正常,但它看起来臃肿。 我想使它更简洁。 有任何想法吗?

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

没有什么好改进的 只需加上括号,就可以让大家明白。

避免isNaN 。 它的行为是误导性的:

 isNaN(undefined) // true 

_.isNaN (来自_.isNaN )是一个优雅的function,其行为如预期:

 // Is the given value `NaN`? // // `NaN` is the only value for which `===` is not reflexive. _.isNaN = function(obj) { return obj !== obj; }; _.isNaN(undefined) // false _.isNaN(0/0) // true 

不pipe比较方法,NaN都不会等于自己,所以我能想到的唯一更简洁的解决scheme就是创build一个具有描述性名称的函数调用,以便进行比较,并在您的代码。

这也将有一个优点,就是当你确定undefined应该等于undefined的那一天,就对algorithm进行本地化。

if ( val1 === val2 )

如果其中一方或双方都是NaN那么它将被评估为假。

另外, NaN !== NaN

只要你知道这两个variables是数字的,你可以尝试:

 if (val1 + '' == val2 + '') 

它将这两个值转换成string。 一个有趣的答案,但它应该工作。 🙂

为什么不是这样的陈述?

 if (isNaN(x) == true){ alert("This is not a number."); } 

对于数字的情况下解决scheme是好的,但扩展到其他数据types的工作,以及我的build议如下:

 if(val1 === val2 || (val1 !== val1 && val2 !== val2)) 

全球化的理由是错误的。 它会给你错误的结果,如情景

 isNaN(undefined); // true isNaN({}); // true isNaN("lorem ipsum"); // true 

我已经在这里发表了一个全面的答案,涵盖了NaN比较平等的情况。

如何testingJavaScriptvariables是否为NaN

我在回顾了ThiefMaster,Esailija,Joachim Isaksson和davidchambers的build议后创build了这个答案。 这可以进一步改善?

 // Determines if two numeric values are equal. // Also returns true when both parameters are NaN. function areEqualNumeric(val1, val2) { return val1 === val2 || (val1 !== val1 && val2 !== val2); } 

那么函数Number.isNaN()是什么? 我想这一定是可以使用的。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

与NaN的平等比较总是导致False

我们可以使用javascript函数isNaN()来检查与NaN的相等性。 例:

 1. isNaN(123) //false 2. var array = [3, NaN]; for(var i = 0 ; i< array.length; i++){ if(isNaN(array[i])){ console.log("True ---- Values of " + i); } else { console.log("false ---- Values of " + i); } } 

结果:

假—-值为0

真值—- 1

find使用Array.prototype.includes MDN链接的另一种方法。 显然,[NaN]包括(NaN)对于NaN是正确的。

 function IsActuallyNaN(obj) { return [obj].includes(NaN); } 

或者我们可以用更简单的davidchambers解决scheme。

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