for each...in和for...in
阿新 • • 發佈:2018-11-15
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
語句在可迭代物件(包括 Array
,Map
,Set
,String
,TypedArray
,arguments 物件等等)上建立一個迭代迴圈,呼叫自定義迭代鉤子,併為每個不同屬性的值執行語句
for...of
與for...in
的區別
無論是for...in
還是for...of
語句都是迭代一些東西。它們之間的主要區別在於它們的迭代方式。
for...of
語句遍歷可迭代物件定義要迭代的資料。
這個的是ECMAScript 6出來的,功能還有迭代生成器等