for in与for of的区别
1、对象遍历
for in 会遍历对象的整个原型链,性能很好,推荐使用。
for of 只遍历当前对象,不会遍历原型链。
var obj = {a: 1, b: 2, c: 3};
for (key in obj) {
console.log(key, obj[key])
}
var obj = {a: 1, b: 2, c: 3};
obj[Symbol.iterator] = function(){
var keys = Object.keys(this);
var count = 0;
return {
next(){
if(count<keys.length){
return {value: obj[keys[count++]],done:false};
}else{
return {value:undefined,done:true};
}
}
}
};
for (key in obj) {
console.log(key, obj[key])
}
// {a: 1}
// {a: 2}
// {a:3}
2、数组遍历
for in 会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),不推荐使用。
var arr = [{a:1}, {a:2},{a:3}]
for (key in arr) {
console.log(arr[key])
}
// {a: 1}
// {a: 2}
// {a:3}
for of 只返回数组的下标对应的属性值
var arr = [{a:1}, {a:2},{a:3}]
for (item of arr) {
console.log(item)
}
// {a: 1}
// {a: 2}
// {a:3}