关于NaN
# 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
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
2