要回答這個問題,就需要先了解下什么是undefined,我們從ECMA-262標(biāo)準(zhǔn)中看下說明:
Undefinedtype:typewhosesolevalueistheundefinedvalue
undefinedvalue:primitivevalueusedwhenavariablehasnotbeenassignedavalue
簡單翻譯下就是:Undefined類型未定義變量時值的類型,而undefined值表示一個變量未賦值時候的值。這里可以看到的是兩個概念,分別是Undfeind類型和undefined值。
下面我們詳細(xì)了解下這兩個概念,眾所周知,Javascript中有很多數(shù)據(jù)類型,比如String表示字符串,Number表示數(shù)值,Object表示對象,當(dāng)然還有很多,這里不一一列舉了,那么Undefined類型就是其中之一,表示未定義的值的類型。
那么undefined值表示的是一個變量或者對象未初始化時候的值,下面我們可以舉幾個例子:
通過var或者let聲明的變量,在未初始化或者未賦值時訪問為undefined
vara//typeofa==='undefined'
Object中訪問未定義或者未初始化的值為undefined
varobj={}//typeofobj.a==='undefined'
Array中訪問不存在或者未賦值的下標(biāo)為undefined
vararr=[]//typeofarr[1]===‘undefined’
下面在介紹一種特殊的例子:
vara=null
if(a==undefined){console.log("Undefined")}
上述代碼執(zhí)行結(jié)果會輸出“Undefined”,注意這里使用的是==作比較,而不是===。所以說在弱類型比較時,undefined和null是相等的,這一點需要是平時開發(fā)中注意。
最后要說的是,變量值為undefined的時候,訪問變量下的任意成員都會報錯,所以在平時開發(fā)中,一定要注意這種情況。