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出來的,功能還有迭代生成器等