forEach
forEach 无法中途跳出 forEach 循环,break、continue 和 return 都不奏效。
for in
for…in 循环只遍历可枚举属性。像 Array 和 Object 使用内置构造函数所创建的对象都会继承自 Object.prototype 和 String.prototype 的不可枚举属性,例如 String 的 indexOf() 方法或 Object 的 toString() 方法。
循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
for…in 不应该用于迭代一个 Array,其中索引顺序很重要。
for in 循环的输出顺序问题先遍历出整数属性(integer properties,按照升序),然后其他属性按照创建时候的顺序遍历出来。
var obj = {
a:1,
‘2’:1,
‘1’:1,
d:1,
c:1,
‘3’:1
}
obj.b=66;
for (var key in obj) {console.log(key); } //”1″, “2”, “3”, “a”, “d”, “c”, “b”
Object.keys(obj); //[“1”, “2”, “3”, “a”, “d”, “c”, “b”]
Object.keys() 和 for in 具有相同的排列顺序
for of
有着同 for…in 一样的简洁语法,但是没有 for…in 那些缺点。不同于 forEach 方法,它可以与 break、continue 和 return 配合使用。提供了遍历所有数据结构的统一操作接口。