IE8對JS的數組,採用屬性遍曆的方法,解析不一樣的地方:

來源:互聯網
上載者:User

print?Array.prototype.Contains = function (str) {    
  if (!str)          return false;   
   for (var i = 0;
i < this.length; i++) {     
     if (this[i] == str) {              return true;          }      }   
   return false;  }   
var tmp = new Array();
  tmp.push("1"); 
tmp.push("2"); 
tmp.push("3");  alert("遍曆屬性");
  for ( var i in tmp ) {    
   alert(tmp[i]);  }  alert("遍曆數組");
  for ( var i=0;i<tmp.length;i++ ) {   
    alert(tmp[i]);  }  Array.prototype.Contains = function (str) {
    if (!str)
        return false;
    for (var i = 0; i < this.length; i++) {
        if (this[i] == str) {
            return true;
        }
    }
    return false;
}

var tmp = new Array();
tmp.push("1");
tmp.push("2");
tmp.push("3");
alert("遍曆屬性");
for ( var i in tmp ) {
     alert(tmp[i]);
}
alert("遍曆數組");
for ( var i=0;i<tmp.length;i++ ) {
     alert(tmp[i]);
}如果是非IE8瀏覽器,例如(IE7、IE9、Chrome、FF,僅測試這幾種)
通過屬性和數組遍曆,其結果是一樣的。

但對於IE8,結果會有一點小小的差異,在IE8下會把原型鏈擴充方法當做一個屬性輸出,大家可以測試一下。

之所以發現這個差異,也是因為解決了一個詭異的bug,有同事在代碼裡面使用for ( var i in tmp )這種方式來遍曆數組的每個元素,如果正好對Array定義了原型鏈方法,則會發生這個問題。

所以建議:如果遍曆數組元素,還是應該採用標準的寫法 for ( var i=0;i<tmp.length;i++ )。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.