我想知道JavaScript中null和undefined之间的区别。


当前回答

Null始终是内存中存在的未知对象,而undefined则不是。

其他回答

undefined和null之间的差别很小,但有区别。值未定义的变量从未初始化。值为null的变量被显式指定为null,这意味着该变量被显地设置为没有值。如果使用null==undefined表达式比较undefineed和null,它们将相等。

我想添加一个与空和未定义之间的细微差别有关的知识点。当您尝试从头开始学习Vanilla JavaScript(JS)时,这一点很好:

null是JS中的保留关键字,而undefined是运行时环境的全局对象。

在编写代码时,这种差异是不可识别的,因为null和undefined总是在JavaScript语句的右侧(RHS)使用。但当你在表达式的左手边(LHS)使用它们时,你可以很容易地观察到这种差异。因此JS解释器将以下代码解释为错误:

var null = 'foo'

它给出以下错误:

未捕获语法错误:意外的标记null

同时,以下代码运行成功,尽管我不建议在现实生活中这样做:

var undefined = 'bar'

这是因为undefined是全局对象(如果JavaScript在浏览器中运行,则为窗口对象)上的一个属性

未定义表示变量已声明但没有值:

var var1;
alert(var1); //undefined
alert(typeof var1); //undefined

Null是赋值:

var var2= null;
alert(var2); //null
alert(typeof var2); //object

在javascript中,所有变量都存储为键值对。每个变量存储为variable_name:variable_value/reference。

undefined表示在内存中给了变量一个空间,但没有给它赋值。作为最佳实践,不应将此类型用作赋值。

在这种情况下,如何表示何时希望变量在代码中的稍后时间没有值?您可以使用类型null,这也是一种用于定义相同事物的类型,缺少值,但它与undefined不同,因为在本例中,内存中实际上有值。该值为空

两者相似,但用法和含义不同。

undefined和null之间的含义差异是JavaScript设计的一个意外,大多数时候这并不重要。如果你真的需要关注这些价值观,我建议你将它们视为可以互换的。

来自Elquent Javascript书