关于NaN

... 2025-7-10 JavaScript
  • 数据类型
大约 1 分钟

# NaN

NaN(Not a Number,不是一个数字)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入 NaN 的是 1985 年的 IEEE 754 浮点数标准。

NaN 属性与 Number.NaN 属性相同。

NaN 是一个“警戒值”(sentinel value,有特殊用途的常规值)

用于指出数字类型中的错误情况:即:“执行数学运算没有成功,这是失败后返回的结果”。

当 Number 提供的类型转换方法在解析一个值却无法返回数字时,则返回 NaN。

NaN 是一个特殊值,它和任何变量都不相等,包括 NaN 自己,是唯一一个非自反(自反,reflexive)的值。

NaN == NaN // false
NaN === NaN // false
1
2

判断一个变量是不是 NaN 可以用 isNaN()函数

但是这并不是一个完美的函数,有些时候用 value !== value 似乎更准确。

ES6 中已经有 Number.isNaN()方法,将比 isNaN()准确的多。

# isNaN 和 Number.isNaN

  • isNaN(val)

    通过 Number() 强制类型转换,将 val 转成 number 类型,再判断是否为 NaN

    所以 isNaN() 是判断 val 是否能转为数字

    如若转换成功,则返回 false,反之返回 true。

    它只是判断参数是否能转成数字,不能用来判断是否严格等于 NaN。

  • Number.isNaN()

    Es6 新加的严格判断是否===NaN

    它会首先判断传入的值是否为数字类型,如不是,直接返回 false。

isNaN 方法首先转换类型,而 Number.isNaN 方法不用;

isNaN 不能用来判断是否严格等于 NaN,Number.isNaN 方法可以。

# typeof 1/0 返回 NaN

运算符的优先级:

() > typeof 运算符 > /

所以 typeof 1 / 0 等同于:

typeof 1 // 'number'
'number' / 0 // NaN
1
2
上次编辑于: 2025年7月10日 04:01
贡献者: HugStars