一、迭代对象的内容不同
for-in 循环迭代对象的是键名,而 for-of 循环迭代对象的是值。因此,for-in 循环适用于迭代对象的键名,而 for-of 循环适用于迭代对象的值。
let obj = {a:1,b:2,c:3};
for(let key in obj) {
console.log(key);//输出a,b,c
}
for(let key of obj) {
console.log(key);//报错 不可循环对象
}
let arr = ['a','b','c'];
for(let key in arr ) {
console.log(key);//输出索引值0,1,2
}
for(let key of arr) {
console.log(key);//输出值a,b,c
}
二、迭代对象的类型不同
for-in 循环适用于遍历对象,包括普通对象、数组、函数等,而 for-of 循环适用于遍历可迭代对象,包括数组、字符串、Map、Set、TypedArray 等。
三、迭代对象的顺序不同
for-in 循环的迭代顺序是不确定的,因为对象的属性没有固定的顺序。而 for-of 循环的迭代顺序是确定的,因为可迭代对象的值是按照一定顺序排列的。
四、迭代对象的原理不同
for-in 循环遍历对象时,会遍历对象的原型链,并且会包含从原型链继承的属性。而 for-of 循环遍历的对象是可迭代对象,它们的值是可枚举的。
建议:for in 循环适合遍历对象 for of 适合遍历数组