# undefined与null的区别

# undefined

Undefined 类型只有一个值,即 undefined

undefined:未定义的值。在声明一个变量后,未初始化的变量会自动被赋予undefined的值,。

这种原始状态会在以下 4 种场景中出现:

  1. 声明一个变量,但是没有赋值
var foo;
console.log(foo); // undefined
  1. 访问对象上不存在的属性或者未定义的变量
var obj = {}
console.log(obj.name)  // undefined
  1. 函数定义了形参,但没有传递实参
//函数定义了形参 a
function fn(a) {
    console.log(a); // undefined
}
fn(); //未传递实参
  1. 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(typeof data); // "object"

1、手动设置变量的值或者对象某一个属性值为null (在作用域中不再需要使用某个对象时,把null赋值给那个变量解除引用,以释放内存)

2、在DOM元素获取中,如果没有获取到指定的元素对象,结果一般是null。

var d = document.getElementById("d");
console.log(d); // 当没有id为"d"的标签时返回null

# 区别

用一句话总结两者的区别就是:

  • undefined 表示一个变量自然的、最原始的状态值。(值不存在)
  • null 则表示一个变量被人为的设置为空对象,而不是原始状态。(值存在但是为空,没有意义)

所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可。