# null 和 undefined
它们俩那么相似,有必要分开设计吗?
var a = null;
var b = undefined;
a == b; // true
语言上来看,它俩都表示 无 的意思。
从转换为布尔值,它俩都是false。
那么这么像的俩,为啥还要分开设计。
# 历史原因
- js 中不像其他语言只有符合类型,js 中还有基本类型,所以不能够只设计一个 null 来表示基本类型的无。
- js 开始设计的时候是没有错误处理的,而 null 转为数字为 0,js null 转化后不好找到错误。
# null 的应用
null 主要表示到对象不存在,此处不应该存在值。
- null 被设计为原型链的顶端,表示一个没有原型对象。
- 函数参数不存在,我们用 null 占位不存在的值。
# undefined
undefined 表示缺少值,此处应该有值,现阶段还没有给定。
- 变量创建没有初始化。
- 函数返回值没有初始。
- 函数中没有给定的参数,访问时 undefined
- 对象的属性还没有赋值的时候为 undefined.