程式開發指的疊代與迭代?

「疊代」:累進取代,不斷重複進行後者加上前者、替換掉前者的動作;
「迭代」:替換取代,表示幾個固定的物件彼此輪替取代的動作。

正體中文於程式上線更新講的
「疊代」表示更新數字有向上、程式開發有進展。
「迭代」,表示程式只有在幾個版本中彼此輪流替換,最糟糕的情況是進版又退版、進版又退版的二元交替。

資料出處:
請問到底是在「疊代」或是在「迭代」?


JavaScript 的疊代

陣列可疊代與物件不可疊代的差別

哪些可以疊代?
ArrayArray-like Object (類陣列)、 SetMapString,可使用 for in 迴圈方法進行疊代。

物件與陣列的疊代,物件資料無法以 [Symbol.iterator] 進行疊代,同樣是物件原始型別,但確有著差異。

疊代操作

注意單字字根的 ble tor tion 的差別,一點點的差就差很多。

iterable object (可疊代物件)
String、Array、Set、Map、arguments 對象、NodeList 集合 (可疊代的型別)

iterator object (疊代器物件)
自己本身可以疊代

iteration object (疊代結果物件)
存放疊代每步驟的結果

iterable object (可疊代物件)

Symbol.iterator 的屬性,會回傳疊代器物件。

疊代器物件 iterator object

Array Iterator、Set Iterator、Map Iterator 是由相關的建構函式所建立的 Iterator 疊代器物件物件,在 Iterator 之中的原型下都會有 next() 的函式方法。


疊代結果物件 iteration object

物件裡具有 value 和 done 的屬性。
Symbol.iterator 就是裡面內的 Symbol,對於可疊代的型別,在 Symbol.iterator 中就有提供函式可以讓它在 for...of 時使用。

疊代器可以透過 next(),一直產生出序列值。

客制化 iterator

在一般物件無法疊代

一般物件下自製疊代器,條件如下
for...of 遂一執行每一筆資料時,在當 Iterator 的 donetrue 時就不再疊代。
– 要有 next()
– 一般物件下 [Symbol.iterator]: 所賦予的函式,在回傳的部份是一個物件其中帶著 next 屬性,將當筆資料做為回傳出來的內容。


參考資料

初學者跪著學JavaScript Day28 : 學迭代,學習不等待
pjchender – [JS] JavaScript 疊代器(Iterator)
MDN – 迭代協議