未捕获的引用错误:在测试真实性时未定义变量

Uncaught ReferenceError: var is undefined when testing for truthy

本文关键字:真实性 测试 未定义 变量 引用 错误      更新时间:2023-09-26

所以,我一直使用构造类型来测试变量的存在:

if(foo){
   doThings();
}

现在,我得到了一个

Uncaught ReferenceError: foo is undefined

这是一个小提琴

事实上,VaR 甚至从未被宣布过。我的问题是,这是正常行为吗?我已经使用了很多次,我认为这不是第一次不声明变量;我几乎可以肯定我从来没有遇到过这个问题,它只是返回了 false,没有进入状态。

欢迎任何帮助和澄清。

如果尚未声明变量,则尝试引用它将导致引用错误。

如果已声明变量但未赋值,则它将隐式具有值undefined,并且您的代码将按预期工作。

在您的情况下,会发生以下情况:

  • 计算if语句 [if (表达式) 语句]
    • 这涉及计算表达式,该表达式返回引用,如 10.3.1
    • 对返回的引用调用 GetValue
      • 如果引用不可解析(其值为 undefined),则抛出引用错误
    • 强制引用的值为布尔值

用于确定引用值的算法遍历嵌套词法环境链,直到到达最外层的上下文。当它到达该点并且仍然找不到所提供标识符的绑定时,它将返回一个基值为 undefined 的引用。

当引用的基值undefined该引用称为"不可解析"时,当引用不可解析时,任何引用它的尝试都会导致(不出所料)引用错误。

检查更新的小提琴。如果您尚未声明变量,则必须检查其类型。

var a = 1;
var b;

try{
    if(typeof(c)!='undefined') {
        alert("OK");   
    }
} catch(ex){
    alert(ex);
}

小提琴

var是Javascript中的一个保留关键字

以下是相应的错误

Uncaught SyntaxError: Unexpected token var