黑科技在不在

2023-01-06 12:35

1個(gè)回答
1、直接判斷對(duì)象不為null
if (!myObj) { 
var myObj = { };
}Javascript語言是"先解析,后運(yùn)行",解析時(shí)就已經(jīng)完成了變量聲明
2、使用window對(duì)象判斷某對(duì)象是否存在
if (!window.myObj) { 
var myObj = { };
}3、使用this對(duì)象判斷某對(duì)象是否存在
if (!this.myObj) { 
this.myObj = { };
} 在某些運(yùn)行環(huán)境中(比如V8、Rhino),window未必是頂層對(duì)象。所以,考慮改成this進(jìn)行判斷,在全局變量的層面中,this關(guān)鍵字總是指向頂層變量,所以就可以獨(dú)立于不同的運(yùn)行環(huán)境。
4、方法三這樣寫可讀性較差,而且this的指向是可變的,容易出錯(cuò),所以進(jìn)一步改寫:
var global = this; 
if (!global.myObj) {
global.myObj = { };
}5、可以使用typeof運(yùn)算符,判斷myObj是否有定義。
if (typeof myObj == "undefined") { 
var myObj = { };
}這是目前使用最廣泛的判斷javascript對(duì)象是否存在的方法。
6、由于在已定義、但未賦值的情況下,myObj的值直接等于undefined,所以上面的寫法可以簡化:
if (myObj == undefined) { 
var myObj = { };
}有兩個(gè)地方需要注意,首先第二行的var關(guān)鍵字不能少,否則會(huì)出現(xiàn)ReferenceError錯(cuò)誤,其次undefined不能加單引號(hào)或雙引號(hào),因?yàn)楸容^的是undefined這種數(shù)據(jù)類型,而不是"undefined"這個(gè)字符串。
7、用精確比較===判斷對(duì)象是否存在
if (myObj === undefined) { 
var myObj = { };
}
8、根據(jù)javascript的語言設(shè)計(jì),undefined == null,所以比較myObj是否等于null,也能得到正確結(jié)果
if (myObj == null) { 
var myObj = { };
}不過,雖然運(yùn)行結(jié)果正確,但是從語義上看,這種判斷方法是錯(cuò)的,應(yīng)該避免。因?yàn)閚ull指的是已經(jīng)賦值為null的空對(duì)象,即這個(gè)對(duì)象實(shí)際上是有值的,而undefined指的是不存在或沒有賦值的對(duì)象。因此,這里只能使用"比較運(yùn)算符"(==),如果這里使用"精確比較運(yùn)算符"(===),就會(huì)出錯(cuò)
9、還可以使用in運(yùn)算符,判斷myObj是否為頂層對(duì)象的一個(gè)屬性
if (!('myObj' in window)) { 
window.myObj = { };
}
10、使用hasOwnProperty方法,判斷myObj是否為頂層對(duì)象的一個(gè)屬性
if (!this.hasOwnProperty('myObj')) { 
this.myObj = { };
}

總結(jié):1、如果只判斷對(duì)象是否存在,使用第五種寫法。2、如果除了對(duì)象是否存在,還要判斷對(duì)象是否有null值,使用第一種寫法。3、除非特殊情況,所有變量都應(yīng)該使用var命令聲明。4、為了跨,建議避免使用window表示頂層對(duì)象。5、在Javascript語言中,null和undefined容易產(chǎn)生混淆。在可能同時(shí)涉及兩者的情況下,建議使用"精確比較"運(yùn)算符(===)。
相關(guān)問答
什么是本科,文科,理科,專科?
1個(gè)回答2025-01-13 05:23
您好!大學(xué)分為本科學(xué)校和??茖W(xué)校,中學(xué)也有??频模咧惺沁x科的,分別有文科和理科。就是這么簡單嗎?相信您不難理解的。
科幻書比故事書多4分之1,科幻書是故事書的百分之幾?故事書比科幻書少多少?
1個(gè)回答2024-01-23 06:02
科幻書是故事書的 125% ?故事書比科幻書少20%
有沒有發(fā)展科技的都市小說 類似天書科技 天才科學(xué)家的
1個(gè)回答2022-12-09 08:26
科技傳承,懶神附體
故事書與科技書本數(shù)的比是七比五, 如果科技書再多三十本,兩種書就同樣多了??萍紩瓉碛卸嗌俦??
1個(gè)回答2024-01-26 15:41
科技書多30本兩者一樣多,說明故事書比科技書多30,設(shè)科技書有x本,故事書就是7x/5,所以有7x/5-x=30,x=75。 所以科技書有75本
某一個(gè)漢字的來歷科故事科科?
1個(gè)回答2024-05-22 09:00
在很久很久以前,農(nóng)民種的莊稼由于受到鼠害的影響,收成很少。后獲悉有一動(dòng)物“貍”,也就是我們現(xiàn)在稱呼的野貓,善抓老鼠。故農(nóng)民就開始養(yǎng)“貍”來保護(hù)莊稼,為了區(qū)別家養(yǎng)和野生的差異,根據(jù)其工作是保護(hù)莊稼...
全文
自己寫的科學(xué)童話或科學(xué)小品
1個(gè)回答2024-01-30 23:49
色光認(rèn)得時(shí)光蝴蝶花憤怒大概今年兒歌忽然后天局日射角條件容易肅然人環(huán)傳統(tǒng)具體依靠眼對(duì)于安靜否雖然個(gè)防空壕 該
“本科”的來歷是什么?為什么叫“本科”?
1個(gè)回答2024-02-02 01:48
1、指進(jìn)士科?!端问贰みx舉志一》:“開寶三年(970年),詔禮部閱貢士及十五舉嘗終場者,得一百六人,賜本科出身。”2、猶今科。商衍鎏《清代科舉考試述錄》第三章第三節(jié):“倘有因丁憂或別項(xiàng)事故,而不能于本...
全文
熱門問答