[犀牛书笔记]-Null与undefined
历史原因
既然有了null,为什么还设计了undefined,有以下两个历史原因
- null的类型被设计成一个对象,在JavaScript中数据类型分为基本类型和引用类型两大类,对象属于引用类型,JavaScript的设计者Brendan Eich觉得表示”无”的值最好不是对象。
- JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。
两者含义的区别
- null表示“没有对象”,即此处没有值。Number()作用于null返回0。
- undefined表示“缺少值”,即此处应该有一个值,但是还没有定义,或者定义了还没有初始化。Number()作用于undefined返回NaN。
两者类型的区别
null的类型为”object”,可以理解成一个不存在的对象的占位符
undefined的类型为undefined
代码中是否等价
null == undefined //output "true"
null === undefined //output "false"
此外
- null是一个关键字,undefined则是一个预定义的全局常量,这个常量的初始化值就是undefined。
- null本质上是一个空的对象,undefined 是window的一个属性。