什么是 NaN、对象或原语?
NaN - 不是数字
这是一个原始的。您可以通过多种方式进行检查:
typeof NaN
给出“数字”,而不是“对象”。
添加一个属性,它就会消失。NaN.foo = "hi"; console.log(NaN.foo) // undefined
NaN instanceof Number
给出 false (但我们知道它是一个数字,所以它必须是一个原语)。
NaN 成为一个对象并没有真正的意义,因为像0 / 0
需要这样的表达式需要导致NaN
,而数学运算总是会导致原语。将 NaN 作为对象也意味着它不能充当虚假值,在某些情况下它会这样做。
NaN
是一个原始数字值。就像1
,2
等。
NaN 是全局对象的属性。
NaN 的初始值为 Not-A-Number — 与 Number.NaN 的值相同。在现代浏览器中,NaN 是不可配置、不可写的属性。即使不是这种情况,也要避免覆盖它。
在程序中很少使用 NaN。它是数学函数失败 (Math.sqrt(-1)) 或尝试解析数字的函数失败 (parseInt("blabla")) 时的返回值。