1. 程式人生 > >js初學問題整理

js初學問題整理

使用 初學 出現 還要 win 總結 不能 運算 比較運算

1、js判斷object類型為空或undefined

直接判斷對象不為null if (!myObj) { var myObj = { }; }Javascript語言是"先解析,後運行",解析時就已經完成了變量聲明2、使用window對象判斷某對象是否存在if (!window.myObj) { var myObj = { }; }3、使用this對象判斷某對象是否存在if (!this.myObj) {  this.myObj = { }; } 在某些運行環境中(比如V8、Rhino),window未必是頂層對象。所以,考慮改成this進行判斷,在全局變量的層面中,this關鍵字總是指向頂層變量,所以就可以獨立於不同的運行環境。4、方法三這樣寫可讀性較差,而且this的指向是可變的,容易出錯,所以進一步改寫:var global = this; if (!global.myObj) { global.myObj = { }; }5、可以使用typeof運算符,判斷myObj是否有定義。if (typeof myObj == "undefined") { var myObj = { }; }這是目前使用最廣泛的判斷javascript對象是否存在的方法。6、由於在已定義、但未賦值的情況下,myObj的值直接等於undefined,所以上面的寫法可以簡化:if (myObj == undefined) {  var myObj = { }; }有兩個地方需要註意,首先第二行的var關鍵字不能少,否則會出現ReferenceError錯誤,其次undefined不能加單引號或雙引號,因為比較的是undefined這種數據類型,而不是"undefined"這個字符串。7、用精確比較===判斷對象是否存在if (myObj === undefined) { var myObj = { }; }8、根據javascript的語言設計,undefined==null,所以比較myObj是否等於null,也能得到正確結果if (myObj == null) { var myObj = { }; }不過,雖然運行結果正確,但是從語義上看,這種判斷方法是錯的,應該避免。因為null指的是已經賦值為null的空對象,即這個對象實際上是有值的,而undefined指的是不存在或沒有賦值的對象。因此,這裏只能使用"比較運算符"(==),如果這裏使用"精確比較運算符"(===),就會出錯9、還可以使用in運算符,判斷myObj是否為頂層對象的一個屬性if (!(‘myObj‘ in window)) {  window.myObj = { }; }10、使用hasOwnProperty方法,判斷myObj是否為頂層對象的一個屬性if (!this.hasOwnProperty(‘myObj‘)) { this.myObj = { }; }總結:1、如果只判斷對象是否存在,推薦使用第五種寫法。2、如果除了對象是否存在,還要判斷對象是否有null值,推薦使用第一種寫法。3、除非特殊情況,所有變量都應該使用var命令聲明。4、為了跨平臺,建議避免使用window表示頂層對象。5、在Javascript語言中,null和undefined容易產生混淆。在可能同時涉及兩者的情況下,建議使用"精確比較"運算符(===)。

js初學問題整理