JS 循環遍歷 總結

1、循環遍歷語句

for...in... (ES5)

語法javascript for(keys in obj){}
適用:遍歷對象
說明
  1.keys表示obj對象的每個鍵值對的鍵(鍵名),全部循環中,須要使用obj[keys]來取到每個值。
  2.for-in 循環,遍歷時不只能讀取對象自身上面的成員屬性,也能延續原型鏈遍歷出對象的原型屬性
  3.使用hasOwnProperty判斷一個屬性是否是對象自身上的屬性。obj.hasOwnProperty(keys)==true 表示這個屬性是對象的成員屬性,而不是原型屬性javascript

for...of... (ES6)

語法javascript for(keys of xxx){}
適用:數組、Set和Map結構、某些相似數組的對象(好比arguments對象、DOM NodeList 對象)、Generator 對象,以及字符串
說明:ES6 借鑑 C++、Java、C# 和 Python 語言,引入了for...of循環,做爲遍歷全部數據結構的統一的方法。
 一個數據結構只要部署了Symbol.iterator屬性,就被視爲具備iterator接口,就能夠用for...of循環遍歷它的成員。
也就是說,for...of循環內部調用的是數據結構的Symbol.iterator方法。
 
其餘
for (let [key,value] of Object.entries(obj))
for (let key of Object.keys(obj))
for (let key of Object.values(obj))java

1.Object.keys()
返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷( enumerable )屬性的鍵名es6

2.Object.values()
返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷( enumerable )屬性的鍵值數組

3.Object.entries()
返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷( enumerable )屬性的鍵值對數組數據結構

forEach (ES5)

語法javascript [].forEach(callbackfn[, thisArg])
適用: 遍歷數組,不改變原數組
說明:對數組裏存在的每一個元素調用一次 callbackfn。callbackfn 只被實際存在的數組元素調用;它不會被缺乏的數組元素調用。
若是提供了一個 thisArg 參數,它會被看成 this 值傳給每一個 callbackfn 調用。若是沒提供它,用 undefined 替代。函數

callbackfn參數,分別爲值、下標、數組自己this

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

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

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

缺點:設計

  1. 不能使用break語句中斷循環
  2. 不能使用return語句返回到外層函數

map (ES5)

語法javascript [].map(callbackfn[, thisArg]);
說明:map方法能夠返回一個處理過的新數組,不改變原數組code

callbackfn參數,分別爲值、下標、數組自己

[].map(function(value, index, array) {
  // ...
  return .....
});

2、比較

for...in缺點

  ①數組的鍵名是數字,可是for...in循環是以字符串做爲鍵名「0」、「1」、「2」等等。
  ②不只遍歷數字鍵名,還會遍歷手動添加的其餘鍵,甚至包括原型鏈上的鍵。
  ③某些狀況下,會以任意順序遍歷鍵名,主要是爲遍歷對象而設計的,不適用於遍歷數組。

for...of優勢

  ①有着同for...in同樣的簡潔語法,可是沒有for...in那些缺點。
  ②不一樣於forEach方法,它能夠與break、continue和return配合使用。
  ③提供了遍歷全部數據結構的統一操做接口。

3、循環控制語句

一、break:跳出本層循環,繼續執行循環結構後面的語句。若是循環有多層,則break只能跳出一層。

二、continue:跳過本次循環剩餘的代碼,跳轉到表達式處進行下一次的循環判斷,繼續執行下一次循環。
   ①對與for循環,continue以後執行的語句,是循環變量更新語句i++;
   ②對於while、do-while循環,continue以後執行的語句,是循環條件判斷;
   所以,使用這兩個循環時,必須將continue放到i++以後使用,不然,continue將跳過i++進入死循環

三、return:在程序(函數)中遇到return語句,那麼代碼就退出該函數的執行,返回到函數的調用處;若是是主程序(main()),那麼結束整個程序的運行。

四、exit: 其餘語言中使用,如C、C++等。調用exit()函數將會結束當前進程,同時刪除子進程所佔用的內存空間,把返回信息傳給父進程。 當exit()中的參數爲0時,表示正常退出,其餘返回值表示非正常退出,執行exit()函數意味着進程結束; 而return僅表示調用堆棧的返回,其做用是返回函數值,而且退出當前執行的函數體,返回到函數的調用處, 在main()函數中, return n和exit(n)是等價的。

相關文章
相關標籤/搜索