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

时间:2011-05-04 06:16:01

标签: javascript

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

8 个答案:

答案 0 :(得分:19)

typeof技术不起作用,因为它们不区分何时根本没有声明变量,何时声明变量但没有赋值,或声明并设置为等于undefined

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

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 :(得分:1)

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

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

答案 2 :(得分:1)

我使用这个功能:

function exists(varname){
    try {
        var x = eval(varname);
        return true;
    } catch(e) { return false; }
}

希望这有帮助。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果您不需要在运行时知道使用JSLint。还要记住,javascript var语句被提升,所以即使var在if块中,它仍然会被定义。

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

答案 5 :(得分:0)

试试这个

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

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

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

答案 6 :(得分:0)

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

比方说,你有一个JS库,如果已经定义了函数,它将调用一个函数,如果没有,那么就没有。您可能已经知道,JS中的函数是第一级对象,并且就像这样的变量。

您可能想先询问它是否存在,然后再调用它。但你也可以将尝试包装在try / catch块中调用它。

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

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) {}
}

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

var x;

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

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

答案 7 :(得分:0)

你追求的是:

window.hasOwnProperty("varname");

更安全的方法甚至可能是:

this.hasOwnProperty("varname");

取决于您的通话环境......