# null与undefined有什么区别?

在javascript语言设计的层面上讲:

语义上null认为是无对象(no object)

语义上undefined认为是无值(no value)

什么意思?(why?)这里面隐藏了什么样的设计哲学呢?

答:无对象、无值都是无!但是null无的更加具体,undefined无的不具体。why?在说什么?什么具体?什么不具体?怎么抽象.....

说人话就是:比方说这里有一个变量a。

var a; // 定义
// 输出 undefined。没有赋值
1
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。

上面观点只是我个人感悟所得!有点偏向个人观点。其中设计哲学我也是还在摸索中。如有更好的例子请微信公众号联系我。

Last Updated: 12/27/2025, 9:51:14 AM