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

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

javascript中forEach,map,for of的應用場景與效率?

javascript中forEach,map,for of的應用場景與效率?

哈士奇WWW 2018-11-21 17:15:42
這裡討論的是lodash版本的_.forEach和_.map,原生ES6 javascript的for of這三種方法。目前我的使用思路是,如果是要遍歷并改變Array并回傳一個新的Array,那我就選擇_.map。至于for of 和_.forEach,我用了以下的方式測試效能:forEachfor offor of速度大勝_.forEach,所以在遍歷Array時,我現在會使用for of而不是_.forEach。我想問的是,這樣的思路有問題嗎?_.forEach要在什麼時候使用呢?我自己想到的_.forEach使用時機是遍歷Object時,javascript原生的話應該是和for in比較。
查看完整描述

1 回答

?
慕森卡

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

有問題。
JS中不存在傳統意義上的數組,靜態語言中,數組是一段連續的內存,每一個元素都是固定字節長度的,所以通過下標可以取地址,快速找到引用值。
但是JS中的數組是對象,這導致你遍歷數組時,其實是在遍歷對象的key(靜態語言中的HashMap),而JS中對數組類型的遍歷做了特殊處理,所以foreach遍歷不到非數值類型的鍵,這也解釋了為什么foreach比forin慢,因為多了一層判斷。
但是如果你使用forin遍歷數組,會帶出非數字鍵:

var x = [1, 2, 3];

x.a = 'a';

x.b = 'b';

x.c = 'c';

for (let k in x)

  console.log(k)

即使你不會這么干,誰知道你的同伴們呢?第三方框架中呢?自定義原型鏈呢?

結論:ES5中遍歷數組還是老老實實的foreach或者for循環.
你的例子中使用的是ES6,由于Array類型實現了Iterator接口,所以forof是安全的,但是如果通過babel編譯成es5,我猜想由于需要引入Iterator的pollyfill,效率不可能比foreach高。


查看完整回答
反對 回復 2018-12-31
  • 1 回答
  • 0 關注
  • 1540 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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