# null与undefined有什么区别?
在javascript语言设计的层面上讲:
语义上null认为是无对象(no object)。
语义上undefined认为是无值(no value)。
什么意思?(why?)这里面隐藏了什么样的设计哲学呢?
答:无对象、无值都是无!但是null无的更加具体,undefined无的不具体。why?在说什么?什么具体?什么不具体?怎么抽象.....
说人话就是:比方说这里有一个变量a。
var a; // 定义
// 输出 undefined。没有赋值
1
2
2
undefined表示这意味着这个a将来可以是任何值。可以是数字、字符串、对象。
再如果说我定义一个变量是user给其赋值为null。在语意上就暗含了虽然我现在user还不是一个对象。但是它将来有可能会变成一个对象。
var user = null;
1
所以说:null它暗含了这个意思。其中含义自己细品!
这就是语言顶层设计的时候javascript语言赋予null和undefined的语义!
存在一个漏洞,抽象漏洞(abstraction leak)
null和object它错误地共享了同一个类型的标记。这就导致了能看到诸多奇怪的现象。
如:
typeof null
1
等到的结果是object。为什么?
答:因为null与object类型标记是一样的。
开发中的应用技巧总结
什么时候用null?
答:有一个变量,它将来会是对象,但现在还不知道是什么对象。你就给其赋值为null。
什么时候用undefined?
答:有一个变量,它将来不知道是什么值?有可能是任何值。你就给其赋值为undefined。
上面观点只是我个人感悟所得!有点偏向个人观点。其中设计哲学我也是还在摸索中。如有更好的例子请微信公众号联系我。