for-in和for-of乍一聽,覺得是同樣的,都是用來「遍歷」的。可是,既然開發出了兩個方法,那就必定有所區別數組
首先,ES6中添加了一個iterable類型,翻譯過來叫「可迭代」。翻譯
在ES6裏,數組Arrray、集合Set以及Map(目前我還不瞭解……)都是「可迭代的」對象
這個「可迭代」添加的目的在於二blog
1.解決for-in遍歷索引(屬性名)的問題索引
2.解決了map、set沒法用下標遍歷的問題開發
先看看目的一的問題,即for-in在數組中的使用it
這裏之因此輸出name,是由於for-in自己遍歷的是屬性名,而數組自己是一個對象,屬性名即下標,因此輸出的都是下標,也天然輸出了一個屬性名name遍歷
但問題是,數組中最須要的是每一項,也就是屬性值map
看了for-in在數組中的表現,咱們發現,必須找到一個能夠直接遍歷數組每一項的方法方法
所以,for-of方法就應運而生,遍歷時得到其中的每一項(屬性值)
同時,對於外界給其做爲對象而添加的屬性值則不會輸出(這裏name的4沒有輸出)
好了,差很少能夠說清楚for-in和for-of的區別了(若是後續發現其餘的,會繼續補充)