檢測資料型別typeof的一個易錯點
切記!!!typeof返回的值是一個字串!!!
出錯的程式碼:
<body> <ul id="uu"> <li>第一個</li> <li>第二個</li> <li>第三個</li> <li>第四個</li> <li>第五個</li> </ul> <script src="common.js"></script> <script> //IE8獲取節點的程式碼變成了獲取元素,獲取元素的返回undefined所以要有相容程式碼 //以獲取第一和最後一個子元素為例 //獲取任意父元素的第一個子元素 function getFirstElementChildByParent(element) { if (typeof element.firstElementChild != undefined) { //切記typeof返回的是字串,所以我之前undefined沒加引號,一直有問題,因為"undefined"!=undefined肯定是正確的 return element.firstElementChild; } else { // return element.firstChild; //本來針對ie8這樣就夠了,但為了更嚴謹,比如有瀏覽器不識別firstElementChild,識別firstChild,但返回的又確實是第一個子節點 var node = element.firstChild; while (node && node.nodeType != 1) { node = node.nextSibling; } return node; } } console.log(getFirstElementChildByParent(my$("uu"))); </script>
此段程式碼為獲取子元素的相容程式碼,本來判斷一個屬性是否在瀏覽器中支援,是看它的型別是否是undefined,所以我寫了
typeof element.firstElementChild != undefined,但發現不支援的ie8也返回了true,難道undefined !=undefined不是false嗎??然後去找了半天,也沒解決,結果最後才發現typeof返回的資料型別的值是一個字串啊!!此時"undefined"!=undefined肯定一直是true,這才恍然大悟。
所以正確的程式碼應為:typeof element.firstElementChild != "undefined"