亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在數組迭代中使用“for ... in”是一個壞主意?

為什么在數組迭代中使用“for ... in”是一個壞主意?

慕少森 2019-05-20 17:15:10
我被告知不要for...in在JavaScript中使用數組。為什么不?
查看完整描述

4 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

您不應該使用for..in迭代數組元素的原因有三個:

  • for..in將循環遍歷數組對象的所有自己和繼承的屬性,而不是DontEnum; 這意味著如果有人將屬性添加到特定的數組對象(有正當理由 - 我自己這樣做了)或更改了Array.prototype(這在代碼中被認為是不好的做法,應該可以很好地與其他腳本一起工作),這些屬性將會也要迭代; 可以通過檢查來排除繼承的屬性hasOwnProperty(),但這對于在數組對象本身中設置的屬性沒有幫助

  • for..in 不保證保留元素排序

  • 它很慢,因為你必須遍歷數組對象及其整個原型鏈的所有屬性,并且仍然只獲取屬性的名稱,即獲取值,將需要額外的查找


查看完整回答
反對 回復 2019-05-20
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

因為...枚舉通過保存數組的對象,而不是數組本身。如果我向數組原型鏈添加一個函數,那么它也將被包含在內。即


Array.prototype.myOwnFunction = function() { alert(this); }

a = new Array();

a[0] = 'foo';

a[1] = 'bar';

for(x in a){

 document.write(x + ' = ' + a[x]);

}

這將寫:


0 = foo

1 =吧

myOwnFunction = function(){alert(this); }

因為你永遠不能確定什么都不會被添加到原型鏈中,只需使用for循環來枚舉數組:


for(i=0,x=a.length;i<x;i++){

 document.write(i + ' = ' + a[i]);

}

這將寫:


0 = foo

1 =吧


查看完整回答
反對 回復 2019-05-20
  • 4 回答
  • 0 關注
  • 488 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號