如何检查javascript中是否存在变量?

how to check if a variable exist in javascript?

我不会问变量是否未定义,或者它是否是null。我想检查变量是否存在。这有可能吗?


typeof技术不起作用,因为它们不区分什么时候变量根本没有声明,什么时候变量已经声明但没有赋值,或者声明并设置为未定义。

但是如果你试图使用一个没有在if条件中声明的变量(或者在赋值的右边),你会得到一个错误。所以这应该是有效的:

1
2
3
4
5
6
7
var exists = true;
try {
    if (someVar)
        exists = true;
} catch(e) { exists = false; }
if (exists)
   // do something - exists only == true if someVar has been declared somewhere.


我使用这个函数:

1
2
3
4
5
6
function exists(varname){
    try {
        var x = eval(varname);
        return true;
    } catch(e) { return false; }
}

希望这有帮助。


1
if ('bob' in window) console.log(bob);

请记住,即使您用var声明了一个变量,也意味着它存在。


你想要的是:

1
window.hasOwnProperty("varname");

更安全的方法可能是:

1
this.hasOwnProperty("varname");

不过,这取决于你的通话环境…


我认为这取决于你想对变量做什么。

例如,假设您有一个JS库,如果定义了一个函数,那么它将调用该函数;如果没有,那么就不调用它。您可能已经知道函数是JS中的第一级对象,并且是这样的变量。

你可能会先问它是否存在,然后再打电话给它。但您也可以将调用它的尝试包装在一个try/catch块中。

在触发事件之前和之后调用函数(如果已定义)的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function fireEvent(event)
{
    try
    {
        willFireEvent(event); // Is maybe NOT defined!
    } catch(e) {}

    //... perform handler lookup and event handling

    try
    {
        hasFiredEvent(event); // Might also NOT exist!
    } catch(e) {}
}

因此,不检查变量,而是捕获错误:

1
2
3
4
5
6
7
8
9
10
var x;

try
{
    x = mayBeUndefinedVar;
}
catch (e)
{
    x = 0;
}

在性能等方面,这是否是一件好事,取决于你在做什么……


试试这个

1
2
3
var ex=false;
try {(ex=myvar)||(ex=true)}catch(e) {}
alert(ex);

如果声明了myvar,则ex为真。

工作示例:http://jsfiddle.net/wcqlz/


如果您在运行时不需要知道,请使用jslint。还请记住,javascript var语句被挂起,因此即使var在if块中,它仍将被定义。

老实说,我认为如果您不确定是否定义了一个变量,那么您就做了一些错误的事情,应该重构代码。


当您试图访问上下文中没有声明的变量时,您将看到错误消息说它是未定义的。这是您可以执行的实际检查,以查看变量是否已定义或不为空。