javascript中各類循環總結

咱們如何遍歷數組中的元素?20年前JavaScript剛萌生時,你可能這樣實現數組遍歷:javascript

1 var arr=["one","two","three"];
2 for(var i=0;i<arr.length;i++){
3     document.write(arr[i]);
4 }

 

 

自ES5正式發佈後,你能夠使用內建的forEach方法來遍歷數組:html

myArray.forEach(function (value) { console.log(value); });
實際上forEach有三個參數 分別爲 值 下標 數組自己 因而咱們有
[].forEach(function(value, index, array) {
    // ...
});

對比jQuery中的$.each方法:java

$.each([], function(index, value, array) {
    // ...
});

會發現,第1個和第2個參數正好是相反的,你們要注意了,不要記錯了。後面相似的方法,例如$.map也是如此。jquery

$.each(Array, function(i, value) {
      Array   //數組
     this;      //this指向當前元素

     i;         //i表示Array當前下標

     value;     //value表示Array當前元素

});
var arr = [ "one", "two", "three", "four"];     
 $.each(arr, function(){     
    alert(this);     
 });     
 

//上面這個each輸出的結果分別爲:one,two,three,four   數組

var obj = { one:1, two:2, three:3, four:4};     
$.each(obj, function(key, val) {     
    alert(obj[key]);           
});   

//這個each就有更厲害了,能循環每個屬性
//輸出結果爲:1 2 3 4函數


例如:
arr.forEach(function(i,j,v){
    document.write("<br />數組的值"+i+
                     "<br />數組的下標"+j+","+
                     "<br />數組自己"+v+"---")
})

這段代碼看起來更加簡潔,但這種方法也有一個小缺陷:網站

forEach不夠靈活this

arr.forEach很差用 你不能使用break語句中斷循環,也不能使用return語句返回到外層函數。編碼

固然,若是隻用for循環的語法來遍歷數組元素也很不錯。spa

那麼,你必定想嘗試一下for-in循環:

for (var index in myArray) { // 千萬別這樣作
  console.log(myArray[index]);
}

在這段代碼中,賦給index的值不是實際的數字,而是字符串「0」、「1」、「2」,此時極可能在無心之間進行字符串算數計算,例如:「2」 + 1 == 「21」,這給編碼過程帶來極大的不便。

簡而言之,

for-in是爲普通對象設計的,你能夠遍歷獲得字符串類型的鍵,所以不適用於數組遍歷。

for...in 不適合用來遍歷數組

for…in會遍歷到自定義屬性甚至原型屬性、index是字符串而不是數值、某些狀況下甚至不按順序遍歷

強大的for-of循環

ES6不會破壞你已經寫好的JS代碼。目前看來,成千上萬的Web網站依賴for-in循環,其中一些網站甚至將其用於數組遍歷。若是想經過修正for-in循環增長數組遍歷支持會讓這一切變得更加混亂,所以,標準委員會在ES6中增長了一種新的循環語法來解決目前的問題。

咱們須要一種更方便的遍歷數組的方法,就像用 for...in 遍歷對象同樣簡單易用的方法,那就是 for...of

就像這樣:

for (var value of myArray) {
  console.log(value);
}

是的,與以前的內建方法相比,這種循環方式看起來是否有些眼熟?那好,咱們將要探究一下for-of循環的外表下隱藏着哪些強大的功能。如今,只需記住:

  • 這是最簡潔、最直接的遍歷數組元素的語法
  • 這個方法避開了for-in循環的全部缺陷
  • 與forEach()不一樣的是,它能夠正確響應break、continue和return語句

for-in循環用來遍歷對象屬性。

for-of循環用來遍歷數據—例如數組中的值。

可是,不只如此!

for-of循環也能夠遍歷其它的集合

for-of循環不只支持數組,還支持大多數類數組對象,例如DOM NodeList對象

for-of循環也支持字符串遍歷,它將字符串視爲一系列的Unicode字符來進行遍歷:

for (var value of myArray) {
  console.log(value);
}

它一樣支持Map和Set對象遍歷。

$.map(array,function)
語法分析:對數組array中的每一個元素,調用function函數進行處理,而後 將結果返回,獲得一個新的數組
實例講解:將數組中的每個元素*2,返回一個新的數組。代碼以下

<html>
<head>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
var arr = [2,3,6];
var arr2 = $.map(arr,function(item){return item*2;});
for(var i=0,len=arr2.length;i<len;i++){
document.write(arr2[i]+"<br />");//結果爲 4 6 12
}
</script>
</head>
</html>

補充說明:item表明着每個元素,這是形參,可用其它代替。
相關文章
相關標籤/搜索