Get to know MDN better
其与 Number.NaN 的值相同。
| 可写 | 否 |
| 可枚举 | 否 |
| 可配置 | 否 |
NaN 是全局对象的一个属性。换句话说,它是全局作用域中的一个变量。
在现代浏览器中,NaN 是一个不可配置、不可写的属性。即使不是这样,也要避免重写它。
有五种不同类型的操作返回 NaN:
NaN 及其行为不是 JavaScript 发明的。它在浮点运算中的语义(包括 NaN !== NaN)是由 IEEE 754 指定的。NaN 的行为包括:
NaN 也是 JavaScript 中的假值之一。
要判断一个值是否为 NaN,可以使用 Number.isNaN() 或 isNaN() 来最清楚地确定一个值是否为 NaN——或者,因为 NaN 是唯一与自身不相等的值,所以你可以执行类似 x !== x 这样的自我比较。
但是,请注意 isNaN() 和 Number.isNaN() 之间的区别:如果当前值是 NaN,或者将其强制转换为数字后将是 NaN,则前者将返回 true。而后者仅当值当前为 NaN 时才为 true:
出于同样的原因,使用 BigInt 值时 isNaN() 会抛出错误,而 Number.isNaN() 不会:
此外,一些数组方法不能找到 NaN,而另一些可以。也就是说,查找索引的(indexOf()、lastIndexOf())不能找到 NaN,而查找值的(includes())可以:
有关 NaN 及其比较的更多信息,请参阅相等性判断。
可以用不同的二进制表示生成两个都是 NaN 的浮点数,这是因为在 IEEE 754 编码中,任何指数为 0x7ff 且尾数非零的浮点数都是 NaN。在 JavaScript 中,你可以使用类型化数组来进行位操作。
NaN 通过数学运算进行传播,因此通常在计算结束时测试 NaN 一次就足以检测错误条件。NaN 被静默转义的唯一情况是使用指数为 0 求幂时,它立即返回 1 而不测试基数的值。
| ECMAScript® 2027 Language Specification # sec-value-properties-of-the-global-object-nan |
启用 JavaScript 以查看此浏览器兼容性表。