什么是NaN?它的类型是什么?如何可靠地测试一个值是否等于NaN?
NaN属性表示“不是数字”的值。这个特殊值是由于一个操作数是非数字的(例如“abc”/ 4)或者因为操作的结果是非数字而无法执行的。
虽然这看起来很简单,但NaN有一些令人惊讶的特征,如果人们没有意识到这些特征,就会导致bug。
一方面,虽然NaN的意思是“不是数字”,但它的类型是,数字:
console.log(typeof NaN === "number"); // logs "true"
此外,NaN相比任何事情 - 甚至本身! - 是false:
console.log(NaN === NaN); // logs "false"
测试数字是否等于NaN的半可靠方法是使用内置函数isNaN(),但即使使用 isNaN()也不是一个好的解决方案。.
一个更好的解决方案要么是使用value!==值,如果该值等于NaN,那么只会生成true。另外,ES6提供了一个新的Number.isNaN()函数 ,它与旧的全局isNaN()函数不同,也更加可靠。