为何NaN无法与自身相等?关于NaN比较与类型判断的疑问
关于JavaScript中NaN的那些“反直觉”特性
嘿,这个问题问得特别到位——NaN绝对是JavaScript里最容易让人困惑的数值类型值之一,咱们把你的疑问逐个掰碎了说:
为什么Number(notNum) === NaN结果是false?
这是因为NaN是JavaScript里唯一一个和自身不相等的值,这是ECMAScript标准明确规定的特性。哪怕两个值都是NaN,用===或者==比较都会返回false,比如:
NaN === NaN; // false NaN == NaN; // 同样是false
所以你直接拿Number(notNum)(结果是NaN)和NaN做全等比较,自然会得到false。
那怎么正确判断一个值是不是NaN呢?有两种靠谱的方式:
- 用ES6新增的
Number.isNaN()方法:它只会对真正的NaN返回true,不会误判其他类型的非数值 - 利用NaN的“自不等”特性:
x !== x,只有当x是NaN时,这个表达式才会返回true
举个实际的例子:
const notNum = 'dfsd'; const result = Number(notNum); console.log(Number.isNaN(result)); // true console.log(result !== result); // true
为什么typeof(Number(notNum)) === 'number'结果是true?
这又是一个容易混淆的点:NaN的类型本质上是number。它是数值类型里的一个特殊值,用来表示“无法表示的无效数值”——比如把字符串转成数值失败、0除以0这类操作的结果,都会得到NaN。所以用typeof检测时,它会返回'number',这完全符合JavaScript的类型定义。
总结一下:NaN虽然叫“非数值”,但它属于数值类型,而且永远不等于自身,判断它必须用专门的方法或者自不等的特性。
内容的提问来源于stack exchange,提问作者NewProgrammer
相关产品推荐
相关产品推荐

