美文网首页
js如何检查NaN是否等于NaN

js如何检查NaN是否等于NaN

作者: 魂斗驴 | 来源:发表于2021-04-07 09:48 被阅读0次

NaNNot-A-Number的意思

JS有一个特点,其中NaN是唯一不等于自身itself的值。那么我们如何测试呢?最后,ES6介绍,解决这一问题的新方法Object.is

const item = NaN;

// Huh?? this doesn't work
item === NaN; // false

// Yay, this works!
Object.is(item, NaN); // true

您什么时候要检查NaN?

例1:尝试进行数学计算时

一个常见的示例是检查值是否可整除。在此示例中,您无法将其与NaN进行比较,因为这种比较将始终失败。

const isDivisible = 5 / "Some String";
isDivisible // returns NaN

isDivisible === NaN // returns false

if (isDivisible === NaN) // ❌ so this statement would never work since this will always return false because NaN is never equal to NaN.

示例2:尝试从字符串中提取数字时

同样,如果您尝试NaNif语句中进行测试,则该语句将不起作用,因为条件将始终返回false。

const hasNumber = parseInt("Hello");
hasNumber // returns NaN

hasNumber === NaN // returns false

if(hasNumber === NaN) // ❌ again, you won’t be able to use this logic because this will always return false.

isNaN可靠吗?

isNaN实际上不是最好的检查方法NaN

“您不认识JS”的作者凯尔·辛普森(Kyle Simpson)提供了一个很好的解释

这是他的书摘录:

isNaN(..)具有致命缺陷。看起来它试图从字面上理解NaN(“非数字”)的含义-它的工作基本上是:“测试传入的东西不是数字是数字。” 但这不是很准确。

var a = 2 / 'foo';
var b = 'foo';

a; // NaN
b; // "foo"

window.isNaN(a); // true
window.isNaN(b); // true -- ouch!

显然,“ foo”实际上不是数字,但也绝对不是NaN值!

社区意见

Number.isNaN

或者,您也可以使用Number.isNaN进行检查。

const item = NaN;

Object.is(item, NaN); // true

Number.isNaN(item); // true

使用Number.isNaN来检查NaN而不是 Object.is

@_eyalPerry:我认为这Number.isNaN更适合此用法,因为它不会产生针对各种类型及其边缘情况检查参数的开销。

@_eyalPerryObject.is还用于比较对象和函数实例,按值,布尔值等比较字符串(所有这些都在MDN上)。这意味着在后台,它必须进行某种类型检查才能正常工作。这使其成为一种多功能工具。有时-多用工具很好。但是,如果您只是想检查一个值是否为Nan,那么为Object.is付出代价是没有意义的。另外,就个人而言,我喜欢在任何情况下都使用最准确,最准确的方法。在这种情况下-Number.isNaN就是这样。注意:谨防全局isNaN功能,请勿使用

有关更多信息 NaN

@RanqueBenoit指出了一些NaN时髦的特征

const notNumber = 3 * 'str';

notNumber; // NaN

typeof notNumber; // number 🤨
isNaN(notNumber); // true 🤨

“为什么”NaN不等于NaN

简短内容:根据IEEE 754规范,对NaN值执行的任何操作都应产生错误的值或引发错误。

参考

How to Check if NaN is equal to NaN

相关文章

网友评论

      本文标题:js如何检查NaN是否等于NaN

      本文链接:https://www.haomeiwen.com/subject/xeorhltx.html