[JS]為什麼 typeof 出來的值是 object 而不是 undefined?

為什麼 typeof 出來的值是 object 而不是 undefined?

最近朋友問一個問題,他使用 typeof 判斷物件是否存在,而 typeof 的回傳值卻是 object,而不是他預期的 undefined ?

Javascript Code如下,


var notExistObj = document.getElementById('hidEmpCounts');
alert(typeof(notExistObj)); // object

 

那為何會如此呢? 可以看一下 MDNdocument.getElementById 說明,

document.getElementById 只會回傳該 Element 或是 null (如果那個id的element不在document之中的話)

 

所以,把 document.getElementById 的回傳值當作是 typeof 的參數傳入,回傳值一定不會是 undefined 。

可參考 MDNtypeof 說明,

image

 

所以如果用 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不存在!")
}

 

參考資料

MDN

document.getElementById

typeof

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^