为什么 Number.isNaN('abc') 结果为 false?

无法找到此问题的确切原因。我知道 isNaN 尝试将值解析为数字,但是当我尝试在“abc”上运行 Number.parseInt 或 Number.parseFloat 时,它给我“NaN”,但当我实际运行 isNaN 函数时,它给我“false”。


我知道有更好的方法来检查某物是否是数字,例如 Number.isFinite( ),但在这种情况下,我试图了解 isNaN 是如何工作的。


console.log(Number.parseInt('abc'));

console.log(Number.parseFloat('abc'));


console.log(Number.isNaN('abc'));


慕姐8265434
浏览 261回答 2
2回答

肥皂起泡泡

NaN是一个特殊的数值。Number.isNaN验证传入的值是否等于NaN,因为“正常”比较不起作用(NaN == NaN根据false定义)。与其他一些方法不同,它Number.isNaN不执行类型转换。是一个字符串值,因此它不能是。'abc'NaN该规范定义Number.isNaN为:如果 Type( number ) 不是 Number,则返回false。如果数字是NaN,则返回true。否则,返回false.请注意,还有全局isNaN函数,其行为有所不同:如果您给它一个不是数字类型的值,它会在进行检查之前将其转换为数字类型。这isNaN('abc')是true因为如果您'abc'使用默认的字符串到数字转换来转换为数字,您会得到NaN; 而是Number.isNaN('abc')因为false它不进行这种转换。

沧海一幻觉

这里没有添加任何新内容。只是想让初学者更清楚一点。isNaN(value)检查值是否字面意思是“ NaN ”。如果值为“ NaN ”,isNaN(value)则返回true。如果value是其他任何内容(例如number、string、undefined、null、Infinity或其他任何内容),isNaN(value)则返回false。//Examples that Return FALSE//console.log(20); // value is 20 - is NOT NaNconsole.log(isNaN(20)); // false   console.log('20'); // value is "20" - is NOT NaNconsole.log(isNaN('20')); // falseconsole.log(23 / 0); // is Infinity - Is NOT NaNconsole.log(isNaN(23 / 0)); // false//Examples that Return TRUE//console.log(parseInt('X20')); // is NaNconsole.log(isNaN(parseInt('X20'))); // true console.log(+'20X'); // is NaNconsole.log(isNaN(+'20X')); // true console.log(Math.sqrt(-1)); // is NaNconsole.log(isNaN(Math.sqrt(-1))); // true console.log(7 ** NaN); // is NaNconsole.log(isNaN(7 ** NaN)); // true console.log(0 * Infinity); // is NaNconsole.log(isNaN(0 * Infinity)); // true console.log('foo' / 30); // is NaNconsole.log(isNaN('foo' / 30)); // true `正如正确指出的,最好用来Number.isFinite(value)检查value是否是数字。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript