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