for each in 與for in與for of
阿新 • • 發佈:2018-11-11
搜索 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; }
2.for in
語法:for (variable in object) {...}
variable
- 在每次叠代時,將不同的屬性名分配給變量。
object
- 被叠代枚舉其屬性的對象。
- 描述:
-
for...in
循環只遍歷可枚舉屬性。像Array
和Object
使用內置構造函數所創建的對象都會繼承自Object.prototype
和String.prototype
的不可枚舉屬性,例如String
的indexOf()
方法或Object
的toString()
方法。循環將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數原型中繼承的屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)。刪除,添加或者修改屬性
for...in
循環以任意序叠代一個對象的屬性(請參閱delete
運算符,了解為什麽不能依賴於叠代的表面有序性,至少在跨瀏覽器設置中)。如果一個屬性在一次叠代中被修改,在稍後被訪問,其在循環中的值是其在稍後時間的值。一個在被訪問之前已經被刪除的屬性將不會在之後被訪問。在叠代進行時被添加到對象的屬性,可能在之後的叠代被訪問,也可能被忽略。通常,在叠代過程中最好不要在對象上進行添加、修改或者刪除屬性的操作,除非是對當前正在被訪問的屬性。這裏並不保證是否一個被添加的屬性在叠代過程中會被訪問到,不保證一個修改後的屬性(除非是正在被訪問的)會在修改前或者修改後被訪問,不保證一個被刪除的屬性將會在它被刪除之前被訪問。3.for of
語法:
for (variable of iterable) { //statements }
variable
- 在每次叠代中,將不同屬性的值分配給變量。
iterable
- 被叠代枚舉其屬性的對象。
- 功能:
for...of
語句在可叠代對象(包括Array
,Map
,Set
,String
,TypedArray
,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...of
與for...in
的區別無論是
for...in
還是for...of
語句都是叠代一些東西。它們之間的主要區別在於它們的叠代方式。for...in
語句以原始插入順序叠代對象的可枚舉屬性。for...of
語句遍歷可叠代對象定義要叠代的數據。
for each in 與for in與for of