for...of & for...in
两者都可以用于遍历,不过for in
遍历的是数组的索引(index
),而for of
遍历的是数组元素值(value
)
关于数组
测试数据:
const menu = ['tomato', 'egg', 'rice']
- 直接遍历数组:for...in获取的是数组的索引值,for...of获取的是数组的属性值
for(const item in menu) {
console.log(item)
}
// 0 1 2
for(const item of menu) {
console.log(item)
}
// tomato egg rice
- 遍历数组的entries
for(const item in menu.entries()) {
console.log(item)
}
// 空的
for(const item of menu.entries()) {
console.log(item)
}
// [0, 'tomato']
// [1, 'egg']
// [2, 'rice']
关于对象
测试数据:
const menusObject = {
item1: 'tomato',
item2: 'egg',
item3: 'rice'
}
- 直接遍历对象:for...in获取的是对象的属性名,for...of报错,因为对象本身并不是可迭代的
for(const item in menusObject) {
console.log(item)
}
// item1 item2 item3
for(const item of menusObject) {
console.log(item)
}
// Uncaught TypeError: menusObject is not iterable
-
遍历对象的entries:相当于是将对象转换成数组
Object.entries(menusObject)的值:
for(const item in Object.entries(menusObject)) {
console.log(item)
}
// 0 1 2
for(const item of Object.entries(menusObject)) {
console.log(item)
}
// ['item1', 'tomato']
// ['item2', 'egg']
// ['item3', 'rice']
对象遍历的方法
-
Object.keys(object)
获取对象的key,也就是属性名
-
Object.values(object)
获取对象的value,也就是属性值
-
Object.entries(object)
获取对象的key+value,也就是属性名+属性值,会以二维数组的形式返回