for in、for of

for-in是ES5标准,遍历的是key(可遍历对象、数组或字符串的key)
使用for in会遍历出所有的可枚举属性,包括原型。例如上面的原型方法method和name属性
如果不想遍历出原型方法和属性的话,需要在内部通过hasOwnPropery方法,判断该属性是否是该对象的实例属性。

for in 循环返回的值都是数据结构的键名。
遍历对象返回的是对象的key值,遍历数组返回的是数组的下标,还会遍历原型上的值和手动添加的值。

var obj={
    a:1,
    b:2,
    c:3
};
Object.prototype.method = function(){
    console.log(this)
}
for(let key in obj){
    console.log(key); //a b c method
    if(obj.hasOwnProperty(key)){
        console.log(key); //a b c 
    }
}

for-of是ES6标准,遍历的是value(可遍历对象、数组或字符串的value),不包括数组的原型属性method和索引name
for of不同于forEach,for of是可以break,continue,return配合使用,for of 循环可以随时退出循环。
遍历对象:让对象用for of:可以使用Object.keys()获取对象的key值集合,在用for of。

var arr=[1,2,3,4,5];
Object.prototype.fn = function(){
    console.log(this.length,'====length')
}
arr.name="数组";
for(let val of arr){
    console.log(val); 
}
// 让对象用for of:
var obj = {name: 'saucxs',age: 18, sex: 1};
for(var key of Object.keys(obj)){
    console.log(key, obj[key]);
    // name saucxs
    // age 21
    // sex 1
}

你可能感兴趣的:(for in、for of)