检查JavaScript变量是否曾被声明过?

时间:2011-12-31 14:17:29

标签: javascript

  

可能重复:
  How to distinguish between a variable that is not declared and a varrable that is declared but not be assigned any value?

我想在我的代码中看到过去的某个人是否已经声明了a变量。

我想到了这个:

alert(typeof(a)=="undefined") //true

然后我测试了:

var a;
alert(typeof(a)=="undefined") //also true !

那我如何检查过去某处是否有var a

3 个答案:

答案 0 :(得分:4)

检查变量是否(本地)声明的唯一方法是测试该值,并查看是否抛出任何ReferenceError

try {
    a === 1; // Some statement to trigger a look-up for the a variable
    alert("a is declared!");
} catch (e) {
    alert("a is not declared!");
}

答案 1 :(得分:2)

AFAIK,你不能用局部变量做到这一点。全局变量,您可以使用'a' in window进行测试。

console.log('a' in window);
   // false

a = undefined;

console.log('a' in window);
   // true

然而,为什么要这样做?它看起来像是一个非常脆弱的方式来构建你的程序。

编辑:我骗了。这可能有效:

try {
  a
  console.log("a is declared");
} catch (x) {
  if (x instanceof ReferenceError) {
    console.log("a isn't declared");
  } else {
    // i have no idea why else this could throw an exception...
  }
}

哦,还有一件事:最好不要在真实应用程序中成为console.log,或者确保将其填入,因为某些浏览器没有定义console(例如没有Firebug的Firefox) )。那也是ReferenceError,顺便说一句......

答案 2 :(得分:0)

使用null启动它,例如:

var a = null;

并检查一下。