訪問原文地址javascript
筆者說,本身基本沒怎麼用過for()
來遍歷,主要是用.forEach()
。html
可是老是會被不少朋友說,這些人認爲for()
的速度要比.forEach()
快一點。(其實這根本沒有根據,下面會講)java
速度固然是很重要的,可是咱們也須要從其餘方面考慮一下,特別是代碼資源。編程
這裏有一篇很棒的文章,很好的分析了for()
遍歷。它同時也針對for()遍歷和
.forEach()作了比對[測試](https://jsperf.com/for-vs-foreach/37)。
for()與
.forEach()`相比會消耗更多的內存。數組
這樣,又回到了老問題,是用空間換速度,仍是反之?jsp
固然,都很重要。首先,這2個方面都不會成爲你代碼中的瓶頸問題。其次,那些小小的優化技巧也不會很好的平衡這2個問題,只會增長你的工做量而已。那我在來看下可讀性、可控性、以及可維護性之間的對比呢。函數式編程
讓咱們先來看個基本的sample函數
好比這個數組測試
var arr = [1, 2, 3];
.map()
:優化
arr.map(fcuntion(i) { console.log(i); })
43個字母
.forEach()
:
arr.forEach(function(i){ console.log(i) })
47個字母
for()
for(var i=0,l=arr.lengrh;i<l; i++) { console.log(i); }
70個字母
.map()
和.forEach()
明顯要簡短一些,而且他們的可讀性更強,同時他們也建立了各自的scope
,而for()
在執行完遍歷以後會把i
和l
這兩個元素掛起來,這讓咱們須要手動增長一些代碼去清除他們所佔用的內存。
因此,這時候能夠告訴你的朋友:
用.forEach()
或者.map()
。
那麼接下來,我繼續作分析,爲何更推薦用.map()
,而不是.forEach()
?
首先,.map()
要比.forEach()
執行速度更快。雖然我也說過執行速度不是咱們須要考慮的主要因素,可是他們都比for()
要更好用,那確定要選更優化的一個。
第二,.forEach()
的返回值並非array。若是你想用函數式編程寫個鏈式表達式來裝個逼,.map()
將會是你不二的選擇。
來看下面這個例子:
var arr = [1, 2, 3]; console.log( arr.map(function(i){ return i+i; }) //鏈式風格 .sort() );// [2,4,6] console.log( arr.forEach(function(i){ return i+i; }) //接不起來,斷了 .sort() );//TypeError: Cannot read property 'sort' of undefined
根據上面的代碼,你們應該瞭解到.forEach()
跟.map()
的侷限。
最後,感謝你們耐心的閱讀,排個序
.map() > .forEach() > for()
https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html