[犀牛书笔记]-Null与undefined

历史原因

既然有了null,为什么还设计了undefined,有以下两个历史原因

  1. null的类型被设计成一个对象,在JavaScript中数据类型分为基本类型和引用类型两大类,对象属于引用类型,JavaScript的设计者Brendan Eich觉得表示”无”的值最好不是对象。
  2. JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

两者含义的区别

  1. null表示“没有对象”,即此处没有值。Number()作用于null返回0。
  2. undefined表示“缺少值”,即此处应该有一个值,但是还没有定义,或者定义了还没有初始化。Number()作用于undefined返回NaN。

两者类型的区别

  1. null的类型为”object”,可以理解成一个不存在的对象的占位符

  2. undefined的类型为undefined

代码中是否等价

null == undefined //output "true"  

null === undefined //output "false"

此外

  1. null是一个关键字,undefined则是一个预定义的全局常量,这个常量的初始化值就是undefined。
  2. null本质上是一个空的对象,undefined 是window的一个属性。