Undefined
Undefined 类型只有一个值,即 undefined,未定义的值。在声明一个变量后,未初始化的变量会自动被赋予 undefined 的值。
这种原始状态会在以下 4 种场景中出现:
声明一个变量,但是没有赋值
var foo; console.log(foo); // undefined访问对象上不存在的属性或者未定义的变量
var obj = {}; console.log(obj.name); // undefined函数定义了形参,但没有传递实参
//函数定义了形参 a function fn(a) { console.log(a); // undefined } fn(); //未传递实参typeof 未初始化和未声明的值
var message; // 这个变量声明之后默认取得了 undefined 值 console.log(typeof message); // undefined console.log(typeof age); // undefined
Null
Null 类型是第二个只有一个值的数据类型,即 null。从逻辑角度来看,null 值表示一个空对象指针,要意在保存对象的变量还没有真正保存对象。而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因。
var data = null;
console.log(data); // "null"
console.log(typeof data); // "object"- 手动设置变量的值或者对象某一个属性值为
null。(在作用域中不再需要使用某个对象时,把null赋值给那个变量解除引用,以释放内存) - 在 DOM 元素获取中,如果没有获取到指定的元素对象,结果一般是
null。
var d = document.getElementById("d");
console.log(d); // 当没有 id 为 "d" 的标签时返回 null区别
用一句话总结两者的区别就是:
undefined表示一个变量自然的、最原始的状态值。(值不存在)null则表示一个变量被人为的设置为空对象,而不是原始状态。(值存在但是为空,没有意义)
所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可。