for、for in、for of介绍

for循环

表达式一般如下:

for(表达式1;表达式2;表达式3){

    表达式4;

}

执行的顺序为:

1)第一次循环,即初始化循环。

首先执行表达式1(一般为初始化语句),再执行表达式2(一般为条件判断语句)。如果符合,则执行表达式4,最后执行表达式3。否则,停止执行。

2)下次的循环:

首先执行表达式2,判断是否符合表达式2的条件;如果符合,继续执行表达式4,最后执行表达式3。否则停止执行。

for...in

表达式一般如下:

for(a in 对象){

   表达式1;

}

此处的a是对象中的key(键名)。

遍历对象:

    var arr={ 
            name: "Peter",
            age:18,
            address:"beijing"
    }; 
    for(var i in arr){ 
            console.log(i);//name,age,address 
    }
    for(var i in arr){ 
            console.log(arr[i]);//name,age,address 
    }

    Array.prototype.number="2018";//为arr原型添加一个number属性

    for(var i in arr){ 
            console.log(i);//name,age,address,number
    }

遍历数组:

// 遍历出来的索引是key值
// meMethod 这个原型对象上的属性也会被遍历出来
// 出来的顺序也不一定是原先书写的顺序
var arr = [1, 2, 3];
Array.prototype.myMethod = function () {
    console.log(this.length);
};
for(i in arr){
    console.log(i);//0,1,2,myMethod
}
for(i in arr){
    console.log(arr[i]);//1,2,3,4
}
  • 一般用于遍历对象的可枚举属性。以及对象从构造函数原型中继承的属性。对于每个不同的属性,语句都会被执行(因为是key,所以直接得到的是属性名)
  • 当使用for in遍历数组时,和遍历对象的行为一样,会遍历数组所有可枚举的属性,所以原型对象上的方法和属性也会被遍历(数组遍历直接得到的是索引,属性直接遍历得到的是属性名)
  • 遍历的顺序可能不是按照实际数组的内部顺序
  • 如果迭代的对象的变量值是null或者undefined, for in不执行循环体,建议在使用for in循环之前,先检查该对象的值是不是null或者undefined

注意:遍历得到的Key都是String类型,不可直接用于数值计算

综上所述:不建议使用for...in遍历数组!

for...of

表达式一般如下:

for(a of 对象){

   表达式1;

}

看着和for...in很像,但是此处的a是对象中的value(值)。

for...of 专注于遍历的 value 值的同时,不会发生原型对象,和对象本身的属性被遍历出来的问题。同样是for...in的例子,它不会遍历出meMethod的值。

for...of相比于for...in更适合遍历数组

猜你喜欢

转载自blog.csdn.net/qq_36470686/article/details/82936378