这两个值几乎没有什么区别,我们都知道这两个值都表示无的意思,他们的历史也简单的说一下吧
原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0。
Number(null)
// 0
5 + null
// 5
但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。
首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。
其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。
Brendan Eich觉得,如果null自动转为0,很不容易发现错误。因此,Brendan Eich又设计了一个undefined。
最初设计,JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
从这一点就可以知道两者之间的区别了,下面例子足以说明
1 + undefined // NaN , undefined是一个表示"无"的原始值,转为数值时为NaN
1 + null // 1 , null是一个表示"无"的对象,转为数值时为0;
两者其他的使用以及判定几乎没有区别