for…in 循环
for…in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
for…in 语句以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。
像 Array和 Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf() 方法或 Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
mycars.color = "white"
for (var x in mycars)
{
console.log(mycars[x]);
}
for…of 循环
for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
mycars.color = "white"
for (var x of mycars)
{
console.log(x);
}
区别:
for…in 遍历(当前对象及其原型上的)每一个属性名称,而 for…of遍历(当前对象上的)每一个属性值。
for … in循环将把name包括在内,但Array的length属性却不包括在内。
for … of循环则完全修复了这些问题,它只循环集合本身的元素。