一千萬個為什麽

搜索

如何在JavaScript中檢查未定義或null變量?

我們經常在JavaScript代碼中使用以下代碼模式

if (typeof(some_variable) != 'undefined' && some_variable != null)
{
   //Do something with some_variable
}

是否有一種不那麽冗長的檢查方式具有相同的效果?

根據一些論壇和文獻說,以下應該具有相同的效果。

if (some_variable)
{
   //Do something with some_variable
}

不幸的是, Firebugsome_variable <�時評估此類語句為運行時錯誤/ code>是未定義的,而第一個對它來說很好。這只是Firebug的一個(不需要的)行為,還是這兩種方式之間確實存在一些差異?

最佳答案

我認為測試“值是 nullundefined ”的最有效方法是

if ( 所以me_variable == null ){
 //所以me_variable is either null or undefined
}

所以這兩行是等價的:

if ( typeof(所以me_variable) !== "undefined" && 所以me_variable !== null ) {}
if ( 所以me_variable != null ) {}

註1

正如問題中所提到的,短變體要求聲明 所以me_variable ,否則將拋出ReferenceError。但是在許多用例中,您可以認為這是安全的:

檢查可選參數:

function(foo){
    if( foo == null ) {...}

檢查現有對象的屬性

if(my_obj.foo == null) {...}

另一方面, typeof 可以處理未聲明的全局變量(只需返回 undefined )。然而,正如Alsciende所解釋的那樣,這些案例應該減少到最低限度。

註2

這個 - 甚至更短 - 變體等價:

if ( !所以me_variable ) {
 //所以me_variable is either null, undefined, 0, NaN, false, or an empty string
}

所以

if ( 所以me_variable ) {
 //we don't get here if 所以me_variable is null, undefined, 0, NaN, false, or ""
}

註3

In general it is recommended to use === instead of ==. The proposed 所以lution is an exception to this rule. The JSHint syntax checker even provides the eqnull option for this rea所以n.

來自 jQuery樣式指南

Strict equality checks (===) should be used in favor of ==. The only exception is when checking for undefined and null by way of null.

// Check for both undefined and null values, for 所以me important rea所以n. 
undefOrNull == null;

轉載註明原文: 如何在JavaScript中檢查未定義或null變量?