前面寫過jquery對象存在與否的判斷。現在談下Js中判斷變量存不存在的問題。
如果這樣if(!a),當變量a在js中沒有申明時,就會報錯,那么接下去的代碼將不會被執行。注意,這種判斷只要變量申明過,if條件都會通過。比如
<script>
var a = null;
var b;
if(!a){
alert("通過")
}
if(!b){
alert("通過")
}
</script>
以上代碼會彈出兩個“通過”。說明這種判斷只是判別變量是否在js里聲明過,而不管其內容時什么。更深層的解釋是:undefined和null在if語句中,都會轉換為false。
對於沒有申明過的變量情況,上述判斷不行了。應該用typeof,例子:
<script>
var a = null;
var b;
if(typeof a!="undefined"){
alert("is defined")
}else{
alert(" is undefined")
}
if(typeof b!="undefined"){
alert("is defined")
}else{
alert(" is undefined")
}
if(typeof c!="undefined"){
alert(" is defined")
}else{
alert(" is undefined")
}
</script>
上述代碼的3個彈窗:第1個走if,第2,3都走else。雖然變量c並沒有聲明,但程序不會報錯。而只聲明的b,跟c的結果一樣。注意,不要試圖把3個看上去重復的彈窗封裝成1個函數,因為對於變量c這樣的傳值,都會報錯!實際應用中,都是在if里面判斷 ,也用不着函數封裝。
可能會有好奇,a的typeof 不等於 “undefined”,事實上,typeof null返回“object”:
<script> var a = null; alert(typeof a)//object </script>
typeof返回的字符串有限,null,Array,自定義的對象類型都會返回“object”,如果我們要詳細的判斷,則需要借助instanceof了。Java中也有此方法,含義是判斷某個變量是否屬於某個類,是個二元運算符,而typeof是一個一元運算符(變量只有1個)。Instanceof的例子很多,網上搜搜。
