在许多计算机语言中,有且仅有一个表示“无”的值,如C语言的NULL,Java的null,Python的None。
然而JS中竟然有两个表示“无”的值:null和undefined,这是为什么?它们之间又有什么区别?
-
null
空的对象引用。
1995年JavaScript诞生之初,像Java一样,只设置了null表示“什么都没有”,因此和Java一样,
(1) null被当成一个对象;
(2) null可以自动转化为0;
typeof null; //返回值为 object
Number(null); //返回值为 0
-
undefined
后来JS的设计者Brendan Eich认为“无”的值最好不是对象,且由于null自动转化为0,因此造成错误不易被发现。
因此,Brendan Eich又设计了一个undefined,表示“缺少值”,即此处应有一个值,但还没有定义;转为数值时为NaN(非数字值的特殊值)。
Number(undefined); //NaN
5+undefined; //Nan
典型的出现场景如下:
(1)变量被声明了,但没有赋值;
(2) 调用函数时,应提供的参数未提供
(3) 对象没的属性未定义;
(4) 对象没有返回值,则默认返回undefined
var i;
i; //undefined
function f(x) {
console.log(X);
}
f(); //undefined
var o = new Object();
o.name; //undefined
var x = f();
x; //undefined
(完)