1. 程式人生 > >for each...in和for...in

for each...in和for...in

for...in

官方解釋:for...in語句以任意順序遍歷一個物件的可列舉屬性。對於每個不同的屬性,語句都會被執行。

 
語法:for (變數 in 物件)
{
    在此執行程式碼(每次迴圈一次,就會把這個物件的屬性賦值給這個變數,然後就可以來檢視有哪些屬性,或者更改屬性等)
}
1.迭代中增加屬性的不確定性(最好不要新增):在迭代進行時被新增到物件的屬性,可能在之後的迭代被訪問,也可能被忽略。通常,在迭代過程中最好不要在物件上進行新增、修改或者刪除屬性的操作,
除非是對當前正在被訪問的屬性。這裡並不保證是否一個被新增的屬性在迭代過程中會被訪問到,不保證一個修改後的屬性(除非是正在被訪問的)會在修改前或者修改後被訪問,
不保證一個被刪除的屬性將會在它被刪除之前被訪問。
2.迭代中刪除屬性:如果之前沒有訪問到這個屬性,但是又被刪除了,就不會訪問到
3.迭代中修改屬性:如果一個屬性在一次迭代中被修改,在稍後被訪問,其在迴圈中的值是其在稍後時間的值。
4.最好不要用for...in去迭代陣列(這個索引按照環境來的):
陣列索引只是具有整數名稱的列舉屬性,並且與通用物件屬性相同。不能保證for ... in將以任何特定的順序返回索引。for ... in迴圈語句將返回所有可列舉屬性,包括非整數型別的名稱和繼承的那些。

                                                                                                      因為迭代的順序是依賴於執行環境的,所以陣列遍歷不一定按次序訪問元素。因此當迭代訪問順序很重要的陣列時,最好用整數索引去進

                                                                                                       行

for迴圈(或者用 Array.prototype.forEach() 或 for...of 環)。

  5.僅迭代自身的屬性!

問題:

 

問題答案是這個嗎?

 

 


 

  for each ...in

官方解釋:使用一個變數迭代一個物件的所有屬性值,對於每一個屬性值,有一個指定的語句塊被執行

語法:

for each (variable in object) {
  statement
}

區別:這個跟for。。。in不同的是,這個遍歷的是每個屬性的屬性值,也同樣最好不要遍歷陣列

 


 

 

官方解釋:for...of語句可迭代物件(包括 ArrayMapSetStringTypedArrayarguments 物件等等)上建立一個迭代迴圈,呼叫自定義迭代鉤子,併為每個不同屬性的值執行語句

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

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

for...in 語句以原始插入順序迭代物件的可列舉屬性

for...of 語句遍歷可迭代物件定義要迭代的資料。

 

這個的是ECMAScript 6出來的,功能還有迭代生成器等