gpt4 book ai didi

javascript - 为什么 Javascript 中 undefined variable 有时会计算为 false,有时会抛出未捕获的 ReferenceError?

转载 作者:行者123 更新时间:2023-12-03 00:21:06 27 4
gpt4 key购买 nike

我读过的所有内容都表明,在 Javascript 中, undefined variable 的 bool 值是 False。我已经使用过这样的代码数百次:

if (!elem) {
...
}

其目的是,如果“elem”未定义,则将执行 block 中的代码。它通常可以工作,但有时浏览器会抛出一个错误,提示 undefined reference 。这看起来很基本,但我找不到答案。

undefined variable 与已定义但值为 undefined 的变量之间是否有区别?这似乎完全不直观。

最佳答案

什么是引用错误?

根据 ECMAScript 5 的定义,a ReferenceError表示检测到无效引用。这本身并没有说明太多,所以让我们深入挖掘一下。

抛开严格模式不谈,当指示脚本引擎获取它cannot resolve the base value的引用值时,就会发生ReferenceError。用于:

A Reference is a resolved name binding. A Reference consists of three components, the base value, the referenced name and the Boolean valued strict reference flag. The base value is either undefined, an Object, a Boolean, a String, a Number, or an environment record (10.2.1). A base value of undefined indicates that the reference could not be resolved to a binding. The referenced name is a String.

当我们引用属性时,基值是我们引用其属性的对象。当我们引用变量时,每个执行上下文的基值都是唯一的,它称为环境记录。当我们引用的东西既不是基础对象值的属性,也不是基础环境记录值的变量时,就会发生 ReferenceError

考虑一下,当您在控制台中键入 foo 且不存在此类变量时会发生什么:您会收到 ReferenceError,因为基值 为 < em>无法解决。但是,如果你这样做 var foo; foo.bar 然后你会得到一个 TypeError 而不是 ReferenceError ——这是一个微妙但非常重要的区别。这是因为基值已成功解析;但是,它的类型为 undefined,并且 undefined 没有属性 bar

防范引用错误

从上面可以看出,要在引用错误发生之前捕获它,您必须确保基值是可解析的。因此,如果您想检查 foo 是否可解析,请执行

if(this.foo) //...

在全局上下文中,this 等于 window 对象,因此 if (window.foo) 是等效的。在其他执行上下文中,使用这样的检查没有多大意义,因为根据定义,它是您自己的代码创建的执行上下文 - 因此您应该知道哪些变量存在,哪些不存在。

关于javascript - 为什么 Javascript 中 undefined variable 有时会计算为 false,有时会抛出未捕获的 ReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981104/

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