|
图解:
图片:isNaN_Number.isNaN.png ![]() isNaN vs Number.isNaN 文字描述: 函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。 函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。 mdn引用: 如果isNaN函数的参数不是Number类型, isNaN函数会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非 NaN 数值来说(空字符串和布尔值分别会被强制转换为数值 0 和 1),返回false值也许会让人感觉莫名其妙。 下一个版本的 ECMAScript (ES2015) 包含Number.isNaN()函数。通过Number.isNaN(x)来检测变量x是否是一个NaN将会是一种可靠的做法。然而,在缺少Number.isNaN函数的情况下,通过表达式(x != x) 来检测变量 x是否是NaN会更加可靠。 另注: 一个isNaN的 polyfill 可以理解为(这个 polyfill 利用了NaN自身永不相等于自身这一特征 ): var isNaN = function(value) {
var n = Number(value);
return n !== n;
}; |
|
|
