2011-09-28 36 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

相關問題