for...in...、for...of...、forEach比较
forEach:
使用return、break等均无法跳出循环
for..in:
1.for in应用于数组,会将数组中的元素和自定义的属性和方法都遍历,自定义在原型对象上的方法也会遍历出来
Array.prototype.sayHello = function(){
console.log("Hello")
}
Array.prototype.str = 'world';
var myArray = [1,2,10,30,100];
myArray.name='数组';
for(let index in myArray){
console.log(index);
}
输出结果:0,1,2,3,4,name,sayHello,str
遍历的是索引,一般不适用于遍历数组,更适用于遍历对象,遍历对象的时候返回对象的属性名和原型上的可枚举方法和属性。
如果遍历数组,有以下不合适:
1.遍历的索引是一个字符串的数字,不可直接进行运算
2.遍历出来的顺序可能并不是实际的顺序
3.会遍历出原型上所有可枚举属性和方法
2.for in应用于对象,也会将对象的属性和对象原型的属性一起遍历出来
Object.prototype.sayHello = function(){
console.log('Hello');
}
Object.prototype.str = 'World';
var myObject = {name:'zhangsan',age:100};
for(let index in myObject){
console.log(index);
}
//输出结果 name,age,str,sayHello
for..of
只能遍历数组,无法循环遍历对象,输出的是数组的值,不会遍历自定义属性或者原型上的属性和方法