所以, 我一直使用构造类型来测试变量的存在:
if(foo){
doThings();
}
现在,我得到了一个
Uncaught ReferenceError: foo is undefined
这是fiddle
事实上var甚至从未被声明过。 我的问题是,这是正常的行为吗?我已经使用了很多次,我认为这不是第一次没有声明变量;我几乎可以肯定,我从来没有遇到过这个问题,它只是返回了假,而且没有达到这个条件。
欢迎任何帮助和澄清。
答案 0 :(得分:5)
如果变量未被声明,则尝试引用它将导致引用错误。
如果已声明变量但未赋值,则它将隐式具有值undefined
,并且您的代码将按预期工作。
在您的情况下,会发生这种情况:
if
statement [if( Expression ) Statement ]
用于确定引用值的算法遍历嵌套词法环境链,直到它到达最外层的上下文。当它到达该点并仍然没有找到所提供标识符的绑定时,它返回一个基值为undefined
的引用。
当引用的基值为undefined
时,该引用被称为“unresolvable”,并且当引用无法解析时,任何引用它的尝试都会导致(不出所料)引用错误
答案 1 :(得分:2)
检查更新的小提琴。如果你还没有声明变量,那么在条件中你必须检查它的类型。
var a = 1;
var b;
try{
if(typeof(c)!='undefined') {
alert("OK");
}
} catch(ex){
alert(ex);
}
答案 2 :(得分:0)
var
是Javascript中的保留关键字。
以下是相应的错误
Uncaught SyntaxError: Unexpected token var