1、判斷js對象是否存在
判斷一個全局對象myObj是否存在晒衩,如果不存在嗤瞎,就對它進行聲明。
1.1听系、第一種寫法分析
// 會報錯猫胁,ReferenceError錯誤
if (!myObj) {
myObj = { };
// 改成:var myObj = { };就不報錯了
// 原因:js是“先解析,后運行”跛锌,解析的時候已經(jīng)完成了變量的聲明,因此在 if 的時候 myObj 已經(jīng)存在 ----》變量提升届惋,但是Javascript解釋器髓帽,只"提升"var命令定義的變量,對不使用var命令脑豹、直接賦值的變量不起作用郑藏,這就是為什么不加var會報錯的原因。
}
1.2瘩欺、第二種寫法
// window是javascript的頂層對象必盖,所有的全局變量都是它的屬性。所以俱饿,判斷myobj是否為空歌粥,等同于判斷window對象是否有myobj屬性,這樣就可以避免因為myObj沒有定義而出現(xiàn)ReferenceError錯誤拍埠。
if (!window.myObj) {
myObj = { };
//不過失驶,從代碼的規(guī)范性考慮,最好還是對第二行加上var
// var myObj = { };
// 或者
// window.myObj = { };
}
1.3枣购、第三種寫法
// 在全局變量的層面中嬉探,this關(guān)鍵字總是指向頂層變量擦耀,還就可以獨立于不同的運行環(huán)境。
if (!this.myObj) {
this.myObj = { };
}
1.4涩堤、第四種寫法
// 針對上面this指向可變眷蜓,容易出錯做優(yōu)化
var global = this;
if (!global.myObj) {
global.myObj = { };
}
1.5、第五種:目前應(yīng)用最廣
if (typeof myObj == "undefined") {
var myObj = { };
}
1.6胎围、第六種
// 已定義未賦值吁系,對象等于undifined,在精確比較的情況下頁成立
if (myObj == undefined) {
var myObj = { };
}
1.7痊远、第七種
// 運行結(jié)果正確垮抗,但不符合邏輯
// null指的是已經(jīng)賦值為null的空對象,即這個對象實際上是有值的碧聪,而undefined指的是不存在或沒有賦值的對象冒版,若下面寫成精確比較,就會出錯
if (myObj == null) {
var myObj = { };
}
1.8逞姿、第八種
if (!('myObj' in window)) {
window.myObj = { };
}
1.9辞嗡、第九種
if (!this.hasOwnProperty('myObj')) {
this.myObj = { };
}