1 辨析Undefined类型和Null类型
1.1 Undefined类型
Undefined类型有且仅有一个字面量undefined,表示的是一个变量不存在。
undefined常出现在以下4种场景:
① 使用只声明而未初始化的变量时,会返回undefined。
var a;
console.log(a); //undefine
② 获取一个对象的某个不存在的属性时,会返回undefined。
var obj = {
school: 'ahu'
}
console.log(obj.age); //undefined
③ 函数没有明确的返回值时,却在其他地方使用了返回值,会返回undefined。
function foo() { }
console.log(foo()); //undefined
④ 函数调用时,使用未赋值的形参,回返回undefined。
function foo(param1, param2) {
console.log(param2);
}
foo(1); //undefined
1.2 Null类型
Null类型有且仅有一个字面量null,表示一个空指针对象,所以使用typeof检测null时会返回"object"的原因。
null常出现在以下3种场景:
① 声明某个变量是为了以后保存某个值,则在声明时就将其赋值为null。
var obj = null;
function foo() {
return {
school: 'ahu'
};
}
obj = foo();
② JavaScript在获取DOM元素时,如果没有获取到指定的元素对象,会返回null。
console.log(document.querySelector('#noId')); //null
③ 在使用正则表达式进行捕获时,如果没有捕获结果,会返回null。
console.log('test'.match('a')); //null
1.3 Undefined和Null的异同
(1)相同点
-
Undefined和Null两种数类型都有且仅有一个字面量,分别是undefined和null。
-
Undefined和Null两种数类型在转换为Boolean类型的值时,都会转换为false。
-
Undefined类型派生自Null类型,所在在非严格相等的情况下,两者是相等的,如下代码:
console.log(null == undefined); //true
(2)不同点
-
null是关键字,而undefined是一个全局变量,即挂载在window对象上的一个变量,并不是关键字。
-
在使用typeof运算检测时,会返回不同的结果。
console.log(typeof undefined); //undefined console.log(typeof null); //object
-
在通过call调用toString()函数时,会返回不同的结果。
console.log(Object.prototype.toString.call(undefined)); //[object Undefined] console.log(Object.prototype.toString.call(null)); //[object Null]
-
字符串拼接时,null会转换为字符串"null",undefined会转换为"undefined"。
-
进行数值运算时,undefined会转换为NaN,无法参与计算;null会转换为0,可以参与计算
console.log(undefined + 0); //NaN console.log(null * 100); //0