要想知道JavaScript中的null到底是什么,可以从历史中寻找答案。

古早

可以在这个项目中找到历史的遗留代码。
image.png
恰好,现在可以使用CLion在Linux上进行调试了。

在最早的JavaScript中,那时还不叫JavaScript叫Mocha,里面数据类型压根就没有null,null是关键字。
image.png
截图中代码执行到此处,已经把null分析出来了:
image.png
在此处会去关键字中寻找null:
image.png
此处代码已经找null了:
image.png
这里进行switch分支判断,最后会去到MOP_NULL分支:
image.png
在MOP_NULL分支进行操作,此操作是Object的处理函数:
image.png
这里到了另一个函数的Object分支,此操作也是Object的函数:
image.png
这里进行打印输出null时的前置操作,将Object转为String:
image.png
打印输出,取值函数是一个宏

  1. #define atom_name(atom) ((const char *)(atom)->entry.key)

image.png
image.png
最后查看地址中的值:
image.png

现代

在MDN中是这样介绍null的:
image.png
null值表示有意不存在任何对象值。它是JavaScript的原始值之一,在布尔操作中被视为假的。

在API中,null经常被检索到一个可以预期有对象但没有对象的地方。
image.png
总结:

大概null的意义一直没有变,有意让某个值不存在任何对象。