for…in 循环可以用来遍历对象的可枚举属性列表(包括[[Prototype]]链)。使用for…in遍历对象无法直接获取到值,但是for…of能取到值(前提对象本身定义了迭代器)
遍历数组
代码:
var arr = ['李', '小', '菜']
console.log("for...in");
for (let item in arr) {
console.log(item)
}
console.log("for...of");
for (let item of arr) {
console.log(item)
}
运行结果:
遍历数组
代码:
let obj = {
name: "一只不太聪明的燕子",
age: 18,
address: "NanJing"
}
console.log("for...in");
for (let item in obj) {
console.log(item)
}
console.log("");
console.log("for...of");
for (let item of obj) {
console.log(item)
}
运行结果:
对于普通对象,没有部署原生的 iterator 接口,直接使用 for…of 会报错
***简单总结就是:
for…in遍历的是数组的索引(即键名),而for…of遍历的是数组元素值。
for…in总是得到对象的key或数组、字符串的下标。
for…of总是得到对象的value或数组、字符串的值,另外还可以用于遍历Map和Set。
总而言之,for…in 适用于遍历对象,for…of 更适用于遍历数组