for in
let arr = [1, 2, 3, 4, 5]
Array.prototype.id = 123
arr.name = 'Jessica'
for (let index in arr) {
if (index == 2) {
// break;//0,1
// continue;//0,1,3,4
// return;//0,1
}
console.log(index, arr[index]);//遍历[1,2,3,4,5,Jessica,123]
}
for of
let arr = [1, 2, 3, 4, 5]
Array.prototype.id = 321
arr.name = 'Mars'
for (let value of arr) {
console.log(value);//只能拿到[1,2,3,4,5]
}
两者区别:
1.for-in只是获取数组的索引;而for-of会获取数组的值
2.for-in会遍历对象的整个原型链,性能差;而for-of只遍历当前对象,不会遍历原型链
3.对于数组的遍历,for-in会返回数组中所有可枚举的属性(包括原型链上可枚举的属性);for-of只返回数组的下标对应的属性值
4.for-of适用遍历数组/字符串/map/set等有迭代器对象的集合,但是不能遍历普通对象(obj is not iterable)
补充说明for-of只遍历当前有迭代器对象的集合,不会遍历原型链:
let obj = {
name: 'han',
sex: 'female'
}
console.log(Object.keys(obj));//返回索引值数组 => ['name','female']
obj.dance = function () {
console.log('dance');
}
Object.prototype.say = function () {
console.log('say');
}
for (let value of Object.keys(obj)) {
console.log(value);//name;sex;dance
}