什么是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.isNaM()函数,它是旧的全局isNaN ()函数不同,也更加可靠。

 

posted @ 2019-03-12 14:12  周家华  阅读(2398)  评论(0编辑  收藏  举报