📜  解释 JavaScript 中未定义和未定义的区别

📅  最后修改于: 2022-05-13 01:56:25.483000             🧑  作者: Mango

解释 JavaScript 中未定义和未定义的区别

在 JavaScript 中,它们都与内存空间有关,它们之间有一个非常简单的区别。如果正在访问的变量名在内存空间中不存在,那么它就不会被定义,如果在内存空间中存在但直到现在还没有被赋值,那么它将是未定义的。

undefined:它是一个具有特殊含义的 JavaScript 关键字。在我们为该内存空间分配值之前,所有在内存中获得空间的东西都将包含 undefined。

让我们了解一下 JavaScript 代码是如何执行的,以更清晰地看到画面。 JavaScript 中的一切都发生在执行上下文中。执行上下文是执行代码和变量获取内存空间的小独立部分。
JavaScript 代码分两阶段执行,

  1. 第一个是内存分配阶段,在此期间所有变量和函数定义都存储在内存堆中。 JavaScript 在此阶段将 undefined 分配给每个变量。
  2. 第二个是执行阶段的线程,在此期间,JavaScript 文件中编写的代码正在执行。
    每个变量都保持未定义的值,直到程序到达我们分配该变量的行。在该行之后,变量的未定义值被原始值替换。

示例 1:将创建全局执行上下文,在内存分配阶段, var a将获得内存空间,JavaScript 将为其分配undefined 。在执行线程期间,JavaScript 将遇到第一行console.log(a)并且由于我们尚未为a 分配值,因此undefined将在控制台上打印。在下一行中,我们将 5 分配给 a,因此变量 a 不再是undefined 。现在它包含值 5。所以下次我们访问变量a 时,它不会被评估为未定义。所以它将打印 a 的实际值。

HTML


HTML


输出(在控制台中):

undefined
5

附加点:

  1. 如果您将函数调用分配给变量,并且该函数不返回任何内容,则该变量将变为undefined
  2. 您可以将undefined显式分配给任何变量,但以不期望的方式使用语言关键字不是一个好习惯。

未定义:在 JavaScript 中,当有人访问不在内存堆内的变量时,这是 JavaScript 将抛出的引用错误之一。

示例 2:首先,将创建全局执行上下文,在内存分配阶段,变量“a”将在内存中获得空间,默认情况下,JavaScript 将 undefined 分配给“a” 在执行线程期间,“console.log(a)”将被打印为未定义。在下一行中,我们将 5 分配给变量 a。在控制台中,将打印 5。在最后一行,当 JavaScript 遇到“console.log(b)”时,它会在执行上下文的内存堆中搜索“b”但它不可用,JS 引擎将抛出“引用错误”并显示“ b 未定义“。 JavaScript 将 遇到引用错误时停止执行。

HTML


输出:

未定义和未定义的区别

undefinednot defined
It works like when we declared a variable in the code but did not assign the value before printing the variable valueIt works like when we did not declare the variable and try to call that variable.