為什麼 typeof 出來的值是 object 而不是 undefined?
最近朋友問一個問題,他使用 typeof 判斷物件是否存在,而 typeof 的回傳值卻是 object,而不是他預期的 undefined ?
Javascript Code如下,
var notExistObj = document.getElementById('hidEmpCounts');
alert(typeof(notExistObj)); // object
那為何會如此呢? 可以看一下 MDN 的 document.getElementById 說明,
document.getElementById 只會回傳該 Element 或是 null (如果那個id的element不在document之中的話)
所以,把 document.getElementById 的回傳值當作是 typeof 的參數傳入,回傳值一定不會是 undefined 。
所以如果用 if (typeof(notExistObj) != "undefined") 一定會認為 Element 是存在的,而發生了js錯誤!
我會使用 if (notExistObj!=null) 來判斷,那為何會有 typeof 判斷呢?
後來朋友回想到,之前是使用 typeof(document.all.hidEmpCounts) 去判斷,所以沒問題。
最近將 document.all.elementId 改成用 document.getElementById('elementId') 就造成了 js 錯誤!
所以如果有些asp程式在翻js時,要注意一下哦!
或是使用 jQuery 判斷它的 length 屬性是否大於 0,
if ($("#hidEmpExists").length > 0) {
alert("hidEmpExists存在!")
} else {
alert("hidEmpExists不存在!")
}
參考資料
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^