以下是使用for...in和for...of分別對Array,Set,Map做的測試:
for...in由於歷史遺留問題,它遍歷的實際上是對象的屬性名稱。一個Array數組也是一個對象,數組中的每個元素的索引被視為屬性名稱,所以我們可以看到使用for...in循環Array數組時,拿到的其實是每個元素的索引。
如上所示,當我們為a多手動添加一個屬性name的時候,for...in循環會把name屬性也包括在內,而Array的length屬性卻不包括在內。
for...of循環則不存在上述的問題,它只循環集合本身的元素。這就是為什么引入for...of循環。