2011-09-28 35 views

回答

72
if (typeof variable !== 'undefined') { 
    // .. 
} 
else 
{ 
    // .. 
} 

在这里找到更多的解释:

JavaScript isset() equivalent

+3

使用!==严格的比较和更好的性能。 –

+1

@ AmericanYak-在*的typeof *测试算法用于解决[''==(http://ecma-international.org/ecma-262/5.1/#sec-11.9.3)和['=== '](http://ecma-international.org/ecma-262/5.1/#sec-11.9.6)是相同的,因为两个值都具有相同的类型(字符串),所以更好的性能来自哪里? – RobG

+0

这失败的时候,因为'的typeof null'是'Object' – nikjohn

0

您可以使用类似这样

if (typeof varname != 'undefined') 
    { 
     //do this 
    }  
    else 
    { 
     //do this 

    } 
3

您只需检查的类型。

if(typeof yourVar !== "undefined"){ 
    alert("defined"); 
} 
else{ 
    alert("undefined"); 
} 
6

使用in运算符。

'myVar' in window; // for global variables only 

typeof检查将用于如果变量返回true,

  1. 它尚未定义
  2. 它已被定义并具有值undefined,或
  3. 它已被定义但尚未初始化。

下列实施例将说明在第二和第三点。

// defined, but not initialized 
var myVar; 
typeof myVar; // undefined 

// defined, and initialized to undefined 
var myVar = undefined; 
typeof myVar; // undefined 
+0

您可以使用*窗口*只有在全局变量的特殊情况下,他们也取得了全局对象的属性。局部变量没有这样的可变变量对象。假设有一个窗口对象可能对浏览器来说是合理的,但一般来说并不是必须的。 – RobG

+1

@RobG - 它不必是'window'或全局对象。任何对象都可以在这里使用。你已经提出了关于本地定义的变量在这里不可访问的好处。我有兴趣了解是否有一种方法可以根据我的第一个标准来确定局部变量的未定义。 – Anurag

+0

如果你正在谈论变量和范围,那么你只能区分全局变量(因为它们是全局对象的属性)和其余部分。在嵌套函数中,由于无法访问相关变量对象,因此无法判断标识符是本地函数变量还是外部函数变量。对象属性解析是另一回事。 – RobG

相关问题