所有的编程语言都存在数据类型的概念。
在JavaScript中,数据类型可以分为基本数据类型和引用数据类型,其中基本数据类型包括Undefined、Null、Boolean、Number、String 5种,在ES6中新增了一种新的基本数据类型Symbol,这个会在第7章中讲到;引用数据类型含有Object、Function、Array、Date等类型,这些将会在第2章和第3章重点讲解。
接下来会详细讲解JavaScript中的基本数据类型。
var a;
console.log(a); // undefined
var obj = {
name: 'kingx'
};
console.log(obj.address); // undefined
function foo() {}
console.log(foo()); // undefined
function foo(param1, param2, param3) {
console.log(param3);
}
foo(1, 2); // undefined
var returnObj = null;
function foo() {
return {
name: 'kingx'
};
}
returnObj = foo();
② JavaScript在获取DOM元素时,如果没有获取到指定的元素对象,就会返回“null”。
document.querySelector('#id'); // null
③ 在使用正则表达式进行捕获时,如果没有捕获结果,就会返回“null”。
'test'.match(/a/); // null
var a;
var b = null;
console.log(a.name); // Cannot read property 'name' of undefined
console.log(b.name); // Cannot read property 'name' of null
上面代码表示在通过某个变量引用name属性时,若该变量值实际为undefined或者null,就会抛出异常。
· Undefined类型派生自Null类型,所以在非严格相等的情况下,两者是相等的,如下面代码所示。
null == undefined; // true
(2)不同点
· null是JavaScript中的关键字,而undefined是JavaScript中的一个全局变量,即挂载在window对象上的一个变量,并不是关键字。
· 在使用typeof运算符检测时,Undefined类型的值会返回“undefined”,而Null类型的值会返回“object”。
typeof undefined; // undefined
typeof null; // object
在通过call调用toString()函数时,Undefined类型的值会返回“[object Undefined]”,而Null类型的值会返回“[object Null]”。
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(null); // [object Null]
· 在需要进行字符串类型的转换时,null会转换为字符串”null”,而undefined会转换为字符串”undefined”。
undefined + ' string'; // undefined string
null + ' string'; // null string
· 在需要进行数值类型的转换时,undefined会转换为NaN,无法参与计算;null会转换为0,可以参与计算。
undefined + 0; // NaN
null + 0; // 0
· 无论在什么情况下都没有必要将一个变量显式设置为undefined。如果需要定义某个变量来保存将来要使用的对象,应该将其初始化为null。这样不仅能将null作为空对象指针的惯例,还有助于区分null和undefined。