ECMAScript中包含六种数据类型:
其中,Undefined类型和Null类型是唯二的仅有一个值的数据类型
通过typeof运算符可能返回如下六种可能的字符串:
"undefined""boolean""string""number""object""function"与ECMAScript中定义的六种数据类型比较,可发现如下差异点:
typeof null并不会返回"null"。这是因为,特殊值null被认为是一个空的对象引用,因此会返回"object";
返回值中出现了"function",而函数并不是ECMAScript中定义的一种数据类型。实质上,在ECMAScript中函数也是对象,但函数确实有其特殊属性,因此区分函数和其他对象是有必要的。
Undefined类型中的唯一值undefined,表示未初始化的变量;
注意:区分未初始化的变量与尚未定义的变量:
var message;
// var age;
alert(message); // "undefined"
alert(age); // ReferenceError: age is not defined
但是,使用typeof操作符时,会有如下返回:
var message;
// var age;
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"综上,最佳实践:
每次定义变量时都进行显示初始化,那么当typeof操作符返回"undefined"时,只能说明该变量尚未被声明。
null与undefined的关系:
alert(null == undefined); // true
因为,实际上undefined是派生自null,但之所以区分是强调其各自的特殊指向。
上面说过,null的特殊意义在于表示空的对象引用(空对象指针),因此建议如下最佳实践:
当一个意在保存对象的变量尚未实际真正保存对象时(刚声明且暂未赋值),都应当明确地让该变量保存null值:
null与undefined来区分暂未赋值而实际意义不同的对象;null便可判定相应变量是否已保存了一个对象的引用。JavaScript - undefined与null的区分及最佳实践
原文:https://www.cnblogs.com/JustBeZero/p/9651738.html