解释 JavaScript 中未定义和未定义的区别
在 JavaScript 中,它们都与内存空间有关,它们之间有一个非常简单的区别。如果正在访问的变量名在内存空间中不存在,那么它就不会被定义,如果在内存空间中存在但直到现在还没有被赋值,那么它将是未定义的。
undefined:它是一个具有特殊含义的 JavaScript 关键字。在我们为该内存空间分配值之前,所有在内存中获得空间的东西都将包含 undefined。
让我们了解一下 JavaScript 代码是如何执行的,以更清晰地看到画面。 JavaScript 中的一切都发生在执行上下文中。执行上下文是执行代码和变量获取内存空间的小独立部分。
JavaScript 代码分两阶段执行,
- 第一个是内存分配阶段,在此期间所有变量和函数定义都存储在内存堆中。 JavaScript 在此阶段将 undefined 分配给每个变量。
- 第二个是执行阶段的线程,在此期间,JavaScript 文件中编写的代码正在执行。
每个变量都保持未定义的值,直到程序到达我们分配该变量的行。在该行之后,变量的未定义值被原始值替换。
示例 1:将创建全局执行上下文,在内存分配阶段, var a将获得内存空间,JavaScript 将为其分配undefined 。在执行线程期间,JavaScript 将遇到第一行console.log(a)并且由于我们尚未为a 分配值,因此undefined将在控制台上打印。在下一行中,我们将 5 分配给 a,因此变量 a 不再是undefined 。现在它包含值 5。所以下次我们访问变量a 时,它不会被评估为未定义。所以它将打印 a 的实际值。
HTML
HTML
输出(在控制台中):
undefined
5
附加点:
- 如果您将函数调用分配给变量,并且该函数不返回任何内容,则该变量将变为undefined 。
- 您可以将undefined显式分配给任何变量,但以不期望的方式使用语言关键字不是一个好习惯。
未定义:在 JavaScript 中,当有人访问不在内存堆内的变量时,这是 JavaScript 将抛出的引用错误之一。
示例 2:首先,将创建全局执行上下文,在内存分配阶段,变量“a”将在内存中获得空间,默认情况下,JavaScript 将 undefined 分配给“a” 。在执行线程期间,“console.log(a)”将被打印为未定义。在下一行中,我们将 5 分配给变量 a。在控制台中,将打印 5。在最后一行,当 JavaScript 遇到“console.log(b)”时,它会在执行上下文的内存堆中搜索“b”但它不可用,JS 引擎将抛出“引用错误”并显示“ b 未定义“。 JavaScript 将 遇到引用错误时停止执行。
HTML
输出:
未定义和未定义的区别undefined not defined It works like when we declared a variable in the code but did not assign the value before printing the variable value It works like when we did not declare the variable and try to call that variable.