# null 和 undefined

它们俩那么相似,有必要分开设计吗?

var a = null;
var b = undefined;
a == b;  // true
语言上来看,它俩都表示 无 的意思。
从转换为布尔值,它俩都是false。
那么这么像的俩,为啥还要分开设计。

# 历史原因

  1. js 中不像其他语言只有符合类型,js 中还有基本类型,所以不能够只设计一个 null 来表示基本类型的无。
  2. js 开始设计的时候是没有错误处理的,而 null 转为数字为 0,js null 转化后不好找到错误。

# null 的应用

null 主要表示到对象不存在,此处不应该存在值。

  1. null 被设计为原型链的顶端,表示一个没有原型对象。
  2. 函数参数不存在,我们用 null 占位不存在的值。

# undefined

undefined 表示缺少值,此处应该有值,现阶段还没有给定。

  1. 变量创建没有初始化。
  2. 函数返回值没有初始。
  3. 函数中没有给定的参数,访问时 undefined
  4. 对象的属性还没有赋值的时候为 undefined.