undefined
有多重角色,一般狀況下,咱們所說的undefined
都指的是全局對象的一個屬性"undefined"
.函數
undefined
在JavaScript中,undefined這個詞有多重含義.首字母大寫的Undefined表示的是一種數據類型,小寫的undefined表示的是屬於這種數據類型的惟一的一個值.但這兩種undefined都只能存在於文檔或規範中,不能存在於JavaScript代碼中.在JavaScript代碼中,你看到的undefined最有多是全局對象的一個屬性
,該屬性的初始值是就是前面所說的原始值undefined
,還有種狀況就是,這個undefined
是個局部變量,就像其餘普通變量同樣,沒有任何特殊性,它的值不必定是undefined
,但一般狀況下都是的.下面咱們所說的undefined
,都指的是window.undefined
這個屬性.spa
在ES3中(Firefox4以前),window.undefined
就是一個普通的屬性,你徹底能夠把它的值改變成爲任意的真值,但在ES5中((Firefox4以後),window.undefined
成了一個不可寫,不可配置的數據屬性,它的值永遠是undefined
.code
一個未初始化的變量的值爲undefined
,一個沒有傳入實參的形參變量的值爲undefined
,若是一個函數什麼都不返回,則該函數默認返回undefined
.對象
你可使用嚴格相等運算符來判斷一個值是不是undefined
:token
var x; if (x === undefined) { // 執行到這裏 } else { // 不會執行到這裏 }
x == undefined
成立還多是由於
x爲
null
,
在JavaScript中null
==
undefined
是返回true的.
另外,還可使用typeof
來判斷:ip
var x; if (typeof x === 'undefined') { // 執行到這裏 }
有時必須使用typeof
的緣由是,若是一個變量根本沒有被聲明,只有使用typeof
判斷纔不會報錯,用相等運算符判斷會拋出異常.ci
// x沒有被聲明過 if (typeof x === 'undefined') { // 不會報錯 // these statements execute } if(x === undefined){ // 拋出ReferenceError異常 }
不過若是要檢測的變量是個全局變量,能夠不使用typeof
.能夠經過檢測全局對象的同名屬性來代替:文檔
// x可能沒有被聲明過,但若是已經聲明瞭的話,x是個全局變量 if (window.x === undefined) { // 即便window.x不存在,也不會報錯 // 可能會執行到這裏 } if(x === undefined){ // 若是window.x不存在,則會拋出ReferenceError異常 }