Lin*_*ink 2 javascript undefined-behavior
我查看了 MDN 文档和其他 Stack Overflow 问题,但是无法找到这个问题的确切原因。我知道 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'));Run Code Online (Sandbox Code Playgroud)
NaN是一个特殊的数字值。Number.isNaN验证传入的值是否等于NaN,因为“正常”比较不起作用(NaN == NaN是false根据定义)。
不像一些其他的方法,Number.isNaN也没有进行类型转换。'abc'是一个字符串值,因此它不能是NaN.
该规范定义Number.isNaN为:
- 如果 Type( number ) 不是 Number,则返回
false。- 如果number是
NaN,则返回true。- 否则,返回
false。
请注意,还有 globalisNaN函数,它的行为有所不同:如果您给它一个不是数字类型的值,它会在进行检查之前将其转换为数字类型。所以isNaN('abc')是true因为如果您'abc'使用默认的字符串到数字转换转换为数字,则会得到NaN; 但Number.isNaN('abc')就是false因为它不会做这种转换。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |