为什么80%的码农都做不了架构师?>>>
作者:汪娇娇
日期:2016.10.10
看到这个标题,大家对这4个变量应该都不陌生,但若说起他们的差别或者是举个小栗子判断结果,估计就有点晕乎乎的了。
1、NaN和Infinity
那先来说说JavaScript的数据类型,有Number、字符串、布尔值、对象等等,而NaN和Infinity就属于Number类型。先说说它俩的差别:
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
举个栗子:
2 / 0; // Infinity
0 / 0; // NaN
并且NaN有个特例,我们都知道相等运算符有两种:== 和 ===。
== 比较,它会自动转换数据类型再比较;
=== 比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
但NaN却和所有的值都不相等,包括它自己:
NaN===NaN; //false;
唯一能判断NaN的方法是通过IsNaN()函数:
isNaN(NaN); // true
2、null和undefined
null和undefined恰好都是JavaScript的数据类型。
在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。
(1)null表示"没有对象",即该处不应该有值。典型用法是:
a、作为函数的参数,表示该函数的参数不是对象。
b、作为对象原型链的终点。
举个栗子:
Object.getPrototypeOf(Object.prototype) // null
(2)undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
a、变量被声明了,但没有赋值时,就等于undefined。
b、调用函数时,应该提供的参数没有提供,该参数等于undefined。
c、对象没有赋值的属性,该属性的值为undefined。
d、函数没有返回值时,默认返回undefined。
举个栗子:
var i; i // undefined
function f(x){console.log(x)} f() // undefined
var o = new Object(); o.p // undefined
var x = f(); x // undefined
事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null,undefined仅仅在判断函数参数是否传递的情况下有用。
举个栗子:
function add(a,b){
var c=a+b;
console.log(a+","+b+","+c);
}
add(1,2);//结果是1,2,3
add(1,null);//结果是1,null,1
add(1);//结果是1,undefined,NaN