- 使用对象不同
- for in 一般用来遍历对象的key,循环只遍历可枚举属性(包括它的原型链上的可枚举属性),可以通过hasOwnProperty()过滤原型上的方法和属性
- for of 一般用来遍历数组的value、类数组对象、字符串、Set、Map以及Generator对象
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
for (let i in iterable) {
console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // 0, 1, 2, "foo"
}
}
for (let i of iterable) {
console.log(i); // 3, 5, 7
}