GOT*_*O 0 61 javascript comparison equality nan
我需要在Javascript中比较两个数值相等.值也可以NaN.我想出了这段代码:
if (val1 == val2 || isNaN(val1) && isNaN(val2)) ...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它看起来很臃肿.我想让它更简洁.有任何想法吗?
Thi*_*ter 51
if(val1 == val2 || (isNaN(val1) && isNaN(val2)))
Run Code Online (Sandbox Code Playgroud)
没什么可改进的.只需添加括号即可让每个人都清楚.
dav*_*ers 23
避免isNaN.它的行为具有误导性:
isNaN(undefined) // true
Run Code Online (Sandbox Code Playgroud)
_.isNaN(来自Underscore.js)是一个优雅的函数,其行为符合预期:
// 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
Run Code Online (Sandbox Code Playgroud)
小智 8
尝试使用Object.is(),它确定两个值是否是相同的值.如果满足下列条件之一,则两个值相同:
都未定义
都是空的
两者都是真的或都是假的
两个相同长度的字符串,具有相同顺序的相同字符
两个相同的对象
数字和数字
两者都是+0
两者都是-0
两个NaN
例如,Object.is(NaN,NaN)=> true
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
无论比较方法如何,NaN永远不会与自身相等,所以我能想到的唯一更简洁的问题解决方案是创建一个带有描述性名称的函数调用来进行这种相当特殊的比较,并使用你的比较函数代码而不是.
这也有利于在您确定undefined也应该等于undefined的那一天本地化算法的更改.
只要您知道这两个变量是数字的,您可以尝试:
if (val1 + '' == val2 + '')
Run Code Online (Sandbox Code Playgroud)
它将两个值转换为字符串.一个有趣的答案,但它应该工作.:)