gpt4 book ai didi

javascript - 未定义类型在 JS 中表现不同

转载 作者:行者123 更新时间:2023-11-29 17:14:10 25 4
gpt4 key购买 nike

我只是在尝试这段 JS 代码 -

if(a){
console.log("a IS DEFINED")
} else {
console.log("a IS UNDEFINED")
}

我收到错误 -

ReferenceError: a is not defined

但是当我添加 var a 时,它会打印出 a IS UNDEFINED

var a;
if(a){
console.log("a IS DEFINED")
} else {
console.log("a IS UNDEFINED")
}

// prints a IS UNDEFINED

为什么在 aundefined 的情况下它的行为不同?

最佳答案

您的困惑是完全可以理解的:这是“未定义”一词的两种不同用法。

未定义的标识符之间是有区别的,未定义

当你做的时候

if (a)

...您正在尝试获取标识符 a 的值。如果您还没有定义该标识符根本,它就是一个ReferenceError。 JavaScript 引擎根本不知道 a 是什么意思。

相比之下,这个:

var a;

定义标识符(作为变量)并赋予其初始值undefined。那么当你这样做的时候

if (a)

...JavaScript 引擎知道您在说什么:它转到变量 a 并获取它的值。

如果出于某种原因你需要知道一个标识符是否被定义并且你不想捕获错误,你可以采用未定义标识符的类型:

if (typeof a === "undefined")

即使 a 完全未定义,也能正常工作(没有错误)。但是,它并没有在这两者之间做出任何区分(未定义的标识符和具有 undefined 值的已定义标识符)。


现在,好像这还不够令人困惑,在“松散模式”中,JavaScript 有一个非常奇怪的行为,我称之为 The Horror of Implicit Globals : 如果您分配给一个未定义的标识符(而不是尝试读取它的值),它不会给出一个ReferenceError,而是创建一个新的全局变量。值得庆幸的是,我们现在有了 ES5 的“严格模式”,这使得这样做本来应该是错误的。 :-)

关于javascript - 未定义类型在 JS 中表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com