未捕获的ReferenceError:在测试truthy时,var是未定义的

时间:2013-10-14 09:37:29

标签: javascript

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

if(foo){
   doThings();
}

现在,我得到了一个

Uncaught ReferenceError: foo is undefined

这是fiddle

事实上var甚至从未被声明过。 我的问题是,这是正常的行为吗?我已经使用了很多次,我认为这不是第一次没有声明变量;我几乎可以肯定,我从来没有遇到过这个问题,它只是返回了假,而且没有达到这个条件。

欢迎任何帮助和澄清。

3 个答案:

答案 0 :(得分:5)

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

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

在您的情况下,会发生这种情况:

  • Evaluate the if statement [if( Expression Statement ]
    • 这涉及评估 Expression ,它根据10.3.1
    • 返回引用
    • 在返回的参考号上调用GetValue
      • 如果引用无法解析(其值为undefined),则引发引​​用错误
    • 将引用的值强制转换为布尔值

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

当引用的基值为undefined时,该引用被称为“unresolvable”,并且当引用无法解析时,任何引用它的尝试都会导致(不出所料)引用错误

答案 1 :(得分:2)

检查更新的小提琴。如果你还没有声明变量,那么在条件中你必须检查它的类型。

var a = 1;
var b;


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

fiddle

答案 2 :(得分:0)

var是Javascript中的保留关键字

以下是相应的错误

Uncaught SyntaxError: Unexpected token var