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 ()函數不同,也更加可靠。