◆
JavaScript NaN 详解:含义与运算规则
含义
NaN 是 JavaScript 的特殊值,表示“非数字”,主要出现在将字符串解析成数字出错的场合。
- 全局属性
NaN的值表示不是一个数字(Not-A-Number)。 NaN属性的初始值就是NaN,和Number.NaN的值一样NaN做任务+ - * /运算都等于其本身NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number
运算规则
NaN 不等于任何值,包括它本身。
NaN === NaN; // false
数组的 indexOf 方法内部使用的是严格相等运算符,所以该方法对 NaN 不成立。
[NaN].indexOf(NaN); // -1
NaN 与任何数(包括它自己)的运算,得到的都是 NaN。
isNaN()
判断一个值是否为 NaN,该方法会强制将参数转换成数字。
等号运算符( == 和 === ) 不能被用来判断一个值是否是 NaN。必须使用 Number.isNaN() 或 isNaN() 函数。在执行自比较之中:NaN,也只有 NaN,比较之中不等于它自己。
isNaN 只对数值有效,如果传入其他值,会被先转成数值。
NaN == NaN; // false
Number.NaN == NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
isNaN('Hello'); // true
// 相当于
isNaN(Number('Hello')); // true
NaN != NaN; // true
typeof NaN; // "number"
Number.isNaN()
和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN('NaN'); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN('blabla'); // false
// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN('37');
Number.isNaN('37.37');
Number.isNaN('');
Number.isNaN(' ');

还没有留言,来发表第一条吧~