無語了,js到底該怎麼判斷變數是否存在

2021-03-04 01:51:21 字數 6539 閱讀 8669

1樓:然後去遠足

在 js 執行層面裡本身無法判斷。

只能判斷乙個變數的值是否為 undefined;但這跟變數存不存在無關,完全可以宣告乙個變數並賦值為 undefined(或不賦值,初值即為 undefined)。

2樓:西安天融信教育

看是不是undefined,如果是true就是不存在

js判斷乙個變數或物件是否存在

3樓:匿名使用者

//判斷變數i是否存在

typeof(i)=="undefined": 未定義//原始js判斷乙個id為div的元素是否存在if(document.getelementbyid("div))//jquery判斷乙個元素是否存在

js中怎麼判定乙個變數是否定義

4樓:個人的一樣

判斷變數是否初始化 var a; if(a)else 確定當 a = false,判斷是錯誤的 判斷變數是否定義: if(b)else 確定當 b = false,判斷是錯誤的 一般都是這麼判斷的

5樓:

錯誤的方法,正確的是:

if(typeof(變數名)=="undefined")

具體的看這裡:網頁鏈結

js判斷物件是否存在的十種方法

6樓:四捨**入

可以參考下面的兩種方法:

1、直接判斷物件不為null

if (!myobj) ;

}javascript語言是"先解析,後執行",解析時就已經完成了變數宣告

2、使用window物件判斷某物件是否存在if (!window.myobj) ;}

7樓:青鳥中關村專家

1、直接判斷物件不為null

if (!myobj) ;

}javascript語言是"先解析,後執行",解析時就已經完成了變數宣告

2、使用window物件判斷某物件是否存在

if (!window.myobj) ;

}3、使用this物件判斷某物件是否存在

if (!this.myobj) ;

}在某些執行環境中(比如v8、rhino),window未必是頂層物件。所以,考慮改成this進行判斷,在全域性變數的層面中,this關鍵字總是指向頂層變數,所以就可以獨立於不同的執行環境。

4、方法三這樣寫可讀性較差,而且this的指向是可變的,容易出錯,所以進一步改寫:

var global = this;

if (!global.myobj) ;

}5、可以使用typeof運算子,判斷myobj是否有定義。

if (typeof myobj == "undefined") ;

}這是目前使用最廣泛的判斷javascript物件是否存在的方法。

6、由於在已定義、但未賦值的情況下,myobj的值直接等於undefined,所以上面的寫法可以簡化:

if (myobj == undefined) ;

}有兩個地方需要注意,首先第二行的var關鍵字不能少,否則會出現referenceerror錯誤,其次undefined不能加單引號或雙引號,因為比較的是undefined這種資料型別,而不是"undefined"這個字串。

7、用精確比較===判斷物件是否存在

if (myobj === undefined) ;

}8、根據javascript的語言設計,undefined == null,所以比較myobj是否等於null,也能得到正確結果

if (myobj == null) ;

}不過,雖然執行結果正確,但是從語義上看,這種判斷方法是錯的,應該避免。

因為null指的是已經賦值為null的空物件,即這個物件實際上是有值的,而undefined指的是不存在或沒有賦值的物件。

因此,這裡只能使用"比較運算子"(==),如果這裡使用"精確比較運算子"(===),就會出錯

9、還可以使用in運算子,判斷myobj是否為頂層物件的乙個屬性

if (!('myobj' in window)) ;

}10、使用hasownproperty方法,判斷myobj是否為頂層物件的乙個屬性

if (!this.hasownproperty('myobj')) ;

}總結:

1、如果只判斷物件是否存在,推薦使用第五種寫法。

2、如果除了物件是否存在,還要判斷物件是否有null值,推薦使用第一種寫法。

3、除非特殊情況,所有變數都應該使用var命令宣告。

4、為了跨平台,建議避免使用window表示頂層物件。

5、在javascript語言中,null和undefined容易產生混淆。在可能同時涉及兩者的情況下,建議使用"精確比較"運算子(===)。

8樓:風流小子愛美人

本篇文章主要是對js判斷物件是否存在的10種方法進行了總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助

javascript語言的設計不夠嚴謹,很多地方一不小心就會出錯。

舉例來說,請考慮以下情況。

現在,我們要判斷乙個全域性物件myobj是否存在,如果不存在,就對它進行宣告。用自然語言描述的演算法如下:

**如下:

if (myobj不存在)

你可能會覺得,寫出這段**很容易。但是實際上,它涉及的語法問題,遠比我們想象的複雜。juriy zaytsev指出,判斷乙個javascript物件是否存在,有超過50種寫法。

只有對javascript語言的實現細節非常清楚,才可能分得清它們的區別。

第一種寫法

根據直覺,你可能覺得可以這樣寫:

**如下:

if (!myobj) ;

}但是,執行這段**,瀏覽器會直接丟擲referenceerror錯誤,導致執行中斷。請問錯在**?

對了,if語句判斷myobj是否為空時,這個變數還不存在,所以才會報錯。改成下面這樣,就能正確執行了。

**如下:

if (!myobj) ;

}為什麼加了乙個var以後,就不報錯了?難道這種情況下,if語句做判斷時,myobj就已經存在了嗎?

要回答這個問題,就必須知道javascript直譯器的工作方式。javascript語言是"先解析,後執行",解析時就已經完成了變數宣告,所以上面的**實際等同於:

**如下:

var myobj;

if (!myobj) ;

}因此,if語句做判斷時,myobj確實已經存在了,所以就不報錯了。這就是var命令的"**提公升"(hoisting)作用。javascript直譯器,只"提公升"var命令定義的變數,對不使用var命令、直接賦值的變數不起作用,這就是為什麼不加var會報錯的原因。

第二種寫法

除了var命令,還可以有另一種改寫,也能得到正確的結果:

**如下:

if (!window.myobj) ;

}window是javascript的頂層物件,所有的全域性變數都是它的屬性。所以,判斷myobj是否為空,等同於判斷window物件是否有myobj屬性,這樣就可以避免因為myobj沒有定義而出現referenceerror錯誤。不過,從**的規範性考慮,最好還是對第二行加上var:

**如下:

if (!window.myobj) ;}

9樓:靳大大來了

js判斷物件是否存

在的十種方法

js指令碼中判斷物件是否存在的十種方法,有了本文提供的這些判斷物件是否存在的方法,以後在js指令碼中做物件檢測,應該沒什麼問題了。

本節內容:

js判斷物件是否存在的10種方法。

判斷乙個全域性物件myobj是否存在,如果不存在,就對它進行宣告。

用自然語言描述的演算法如下:

if (myobj不存在)

juriy zaytsev指出,判斷乙個javascript物件是否存在,有超過50種寫法。

只有對javascript語言的實現細節非常清楚,才可能分得清它們的區別。

第一種寫法

根據直覺,你可能覺得可以這樣寫:

複製** **示例:

if (!myobj) ;

}但是,執行這段**,瀏覽器會直接丟擲referenceerror錯誤,導致執行中斷。請問錯在**?

對了,if語句判斷myobj是否為空時,這個變數還不存在,所以才會報錯。改成下面這樣,就能正確執行了。

複製** **示例:

if (!myobj) ;

}為什麼加了乙個var以後,就不報錯了?

難道這種情況下,if語句做判斷時,myobj就已經存在了嗎?

要回答這個問題,就必須知道javascript直譯器的工作方式。javascript語言是"先解析,後執行",解析時就已經完成了變數宣告,所以上面的**實際等同於:

複製** **示例:

var myobj;

if (!myobj) ;

}因此,if語句做判斷時,myobj確實已經存在了,所以就不報錯了。這就是var命令的"**提公升"(hoisting)作用。javascript直譯器,只"提公升"var命令定義的變數,對不使用var命令、直接賦值的變數不起作用,這就是為什麼不加var會報錯的原因。

第二種寫法

複製** **示例:

除了var命令,還可以有另一種改寫,也能得到正確的結果:

if (!window.myobj) ;

}window是javascript的頂層物件,所有的全域性變數都是它的屬性。所以,判斷myobj是否為空,等同於判斷window物件是否有myobj屬性,這樣就可以避免因為myobj沒有定義而出現referenceerror錯誤。不過,從**的規範性考慮,最好還是對第二行加上var:

複製** **示例:

if (!window.myobj) ;

} 或寫成這樣:

複製** **示例:

if (!window.myobj) ;

}第三種寫法

上面這種寫法的缺點在於,在某些執行環境中(比如v8、rhino),window未必是頂層物件。所以,考慮改寫成:

複製** **示例:

if (!this.myobj) ;

}在全域性變數的層面中,this關鍵字總是指向頂層變數,所以就可以獨立於不同的執行環境。

第四種寫法

但是,上面這樣寫可讀性較差,而且this的指向是可變的,容易出錯,所以進一步改寫:

複製** **示例:

var global = this;

if (!global.myobj) ;

}用自定義變數global表示頂層物件,就清楚多了。

第五種寫法

還可以使用typeof運算子,判斷myobj是否有定義。

複製** **示例:

if (typeof myobj == "undefined") ;

}這是目前使用最廣泛的判斷javascript物件是否存在的方法。

第六種寫法

由於在已定義、但未賦值的情況下,myobj的值直接等於undefined,所以上面的寫法可以簡化:

複製** **示例:

if (myobj == undefined) ;

}有兩個地方需要注意,首先第二行的var關鍵字不能少,否則會出現referenceerror錯誤,其次undefined不能加單引號或雙引號,因為比較的是undefined這種資料型別,而不是"undefined"這個字串。

第七種寫法

上面的寫法在"精確比較"(===)的情況下,依然成立:

複製** **示例:

if (myobj === undefined) ;

}第八種寫法

根據javascript的語言設計,undefined == null,所以比較myobj是否等於null,也能得到正確結果:

複製** **示例:

if (myobj == null) ;

}不過,雖然執行結果正確,但是從語義上看,這種判斷方法是錯的,應該避免。

因為null指的是已經賦值為null的空物件,即這個物件實際上是有值的,而undefined指的是不存在或沒有賦值的物件。

因此,這裡只能使用"比較運算子"(==),如果這裡使用"精確比較運算子"(===),就會出錯。

第九種寫法

還可以使用in運算子,判斷myobj是否為頂層物件的乙個屬性:

複製** **示例:

if (!('myobj' in window)) ;

}第十種寫法

最後,使用hasownproperty方法,判斷myobj是否為頂層物件的乙個屬性:

複製** **示例:

if (!this.hasownproperty('myobj')) ;

}總結:

1,如果只判斷物件是否存在,推薦使用第五種寫法。

2,如果除了物件是否存在,還要判斷物件是否有null值,推薦使用第一種寫法。

3,除非特殊情況,所有變數都應該使用var命令宣告。

4,為了跨平台,建議避免使用window表示頂層物件。

5,在javascript語言中,null和undefined容易產生混淆。在可能同時涉及兩者的情況下,建議使用"精確比較"運算子(===)。

js 物件的屬性名是變數怎麼處理

var obj var key testkey console.log obj key 使用方括號訪問 目標 js的屬性名可以使用變數 舉例 js物件object,當賦給該物件屬性的時候可以採用以下方式 如下 var object object.prop1 value1 object.prop2 v...

到底該怎麼判斷呢?要怎麼判斷?

根據你的描述,他不屬於硬漢,硬漢是敢做敢為 至死不渝。他應該是即內向又固執的型別。要多溝通,千萬不要試探。聽我的不會錯的,是我的親身經歷,我不會騙人的。哎!愛乙個人不容易,要好好珍惜喔!這個問題很麻煩,現在的問題不在於你或者他,多在於你們之間熟悉程度,次數多了,基本上都熟悉了,方方面面,交流 愛好 ...

在C語言中,怎麼判斷變數是int型的還是char型的

變數是int型的還是char型,是由宣告決定的。函式呼叫時引數型別錯,你編譯時就通不過呀。unsigned char 可以當無符號整型用。假設函式形式為 int function int n 方法1 判斷實參字長 int function int n 在c語言裡有個函式可以判斷輸入的是不是數字或者字...