之前我们一直使用的for来循环一个数组的方法是这样的:
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
自从ES5起,我们开始可以使用内置的forEach方法:
myArray.forEach(function (value) {
console.log(value);
});
forEach写法简单了许多,但也有短处:你不能中断循环(使用break语句或使用return语句
for in是ES5标准,遍历key.
for of是ES6标准,遍历value.
for-in循环
JavaScript里还有一种循环方法:for-in。
for-in循环实际是为循环”enumerable(可枚举)“对象而设计的:
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// 输出:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
你也可以用它来循环一个数组:
for (var index in myArray) { // 不推荐这样
console.log(myArray[index]);
}
不推荐用for-in来循环一个数组,因为,不像对象,数组的index
跟普通的对象属性不一样,是重要的数值序列指标。
for-of循环
JavaScript6里引入了一种新的循环方法,它就是for-of循环,它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。
for (var value of myArray) {
console.log(value);
}
for-of不能循环对象
因为能够被for...of正常遍历的,都需要实现一个遍历器Iterator。而数组、字符串、Set、Map结构,早就内置好了Iterator(迭代器),它们的原型中都有一个Symbol.iterator方法,而Object对象并没有实现这个接口,使得它无法被for...of遍历