1. 程式人生 > >for each in 與for in與for of

for each in 與for in與for of

搜索 scrip cti nta iterator for 找到 可選 value

1.for each in

語法

for each (variable in object) {
  statement
}

參數:
variable
用來遍歷屬性值的變量,前面的var關鍵字是可選的.該變量是函數的局部變量而不是語句塊的局部變量.
object
該對象的屬性值會被遍歷.
statement
遍歷屬性值時執行的語句. 如果想要執行多條語句, 請用({ ... }) 將多條語句括住.
實例:
var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};

for each (var item in obj) {
  sum += item;
}

print(sum); // 輸出"26",也就是5+13+8的值
2.for in
語法:
for (variable in object) {...}
variable
在每次叠代時,將不同的屬性名分配給變量
object
被叠代枚舉其屬性的對象。
描述:

for...in 循環只遍歷可枚舉屬性。像 ArrayObject使用內置構造函數所創建的對象都會繼承自Object.prototypeString.prototype的不可枚舉屬性,例如 StringindexOf() 方法或 ObjecttoString()方法。循環將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數原型中繼承的屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)。

刪除,添加或者修改屬性

for...in 循環以任意序叠代一個對象的屬性(請參閱delete運算符,了解為什麽不能依賴於叠代的表面有序性,至少在跨瀏覽器設置中)。如果一個屬性在一次叠代中被修改,在稍後被訪問,其在循環中的值是其在稍後時間的值。一個在被訪問之前已經被刪除的屬性將不會在之後被訪問。在叠代進行時被添加到對象的屬性,可能在之後的叠代被訪問,也可能被忽略。通常,在叠代過程中最好不要在對象上進行添加、修改或者刪除屬性的操作,除非是對當前正在被訪問的屬性。這裏並不保證是否一個被添加的屬性在叠代過程中會被訪問到,不保證一個修改後的屬性(除非是正在被訪問的)會在修改前或者修改後被訪問,不保證一個被刪除的屬性將會在它被刪除之前被訪問。

3.for of

語法:

for (variable of iterable) {
    //statements
}
variable
在每次叠代中,將不同屬性的值分配給變量。
iterable
被叠代枚舉其屬性的對象。
功能:
for...of語句在可叠代對象(包括 ArrayMapSetStringTypedArray,arguments 對象等等)上創建一個叠代循環,調用自定義叠代鉤子,並為每個不同屬性的值執行語句。

示例

叠代Array

let iterable = [10, 20, 30];

for (let value of iterable) {
    value += 1;
    console.log(value);
}
// 11
// 21
// 31

如果你不想修改語句塊中的變量 , 也可以使用const代替let

let iterable = [10, 20, 30];

for (const value of iterable) {
  console.log(value);
}
// 10
// 20
// 30

*****其他類型也如此。

4.for...offor...in的區別

無論是for...in還是for...of語句都是叠代一些東西。它們之間的主要區別在於它們的叠代方式。

for...in 語句以原始插入順序叠代對象的可枚舉屬性。

for...of 語句遍歷可叠代對象定義要叠代的數據。

 


for each in 與for in與for of