4

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

if(foo){
   doThings();
}

现在,我得到一个

Uncaught ReferenceError: foo is undefined

这是一个小提琴

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

欢迎任何帮助和澄清。

4

3 回答 3

5

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

如果一个变量已被声明但未赋值,那么它将隐含地具有该值undefined,并且您的代码将按预期工作。

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

  • 评估if语句[if( Expression ) Statement ]
    • 这涉及根据10.3.1评估Expression,它返回一个引用
    • 在返回的引用上 调用GetValue
      • 如果引用不可解析(它的值为undefined),则抛出引用错误
    • 将引用的值强制为布尔值

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

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

于 2013-10-14T09:44:36.857 回答
2

check the updated fiddle. If you haven't declare a variable then in condition u will have to check its type.

var a = 1;
var b;


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

fiddle

于 2013-10-14T09:54:00.577 回答
0

var是 Javascript 中的保留关键字

以下是对应的错误

Uncaught SyntaxError: Unexpected token var 
于 2013-10-14T09:42:26.183 回答