你绝对不知道的for...of...

3,985 阅读1分钟

forEach、for...in...跟 for...of...的区别

js 常用的遍历的方法 有forEach、for...in...、for...of...

var a = [1,2]
a.forEach((item,index)=>{
    //do Something
})

for(let i in a){ 
   // do Something
}

for(let i of a){ 
   //do Something 
}

从用法来说 forEach 算是比较简便的,直接可以拿到键跟值,但是 forEach 不能使用break,跟return跳出循环,没有返回值。这个方法在数组的原型上才有,对象没有这个方法不能调用。

for...in... 可以说是比较接近原生的循环,不管是数组,还是对象,或是类数组对象都能循环,甚至能拿到原型上面的属性值,取到的是键名。如果是数组就拿到下标,对象就拿到属性名,类数组拿到的也是下标。可以使用birek,renturn 跳出循环。
for...in循环有几个缺点。

  1. 数组的键名是数字,但是for...in循环是以字符串作为键名“0”、“1”、“2”等等。
  2. for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
  3. 某些情况下,for...in循环会以任意顺序遍历键名。

image.png

image.png

for...of... 是es6一个新增的东西,用法跟for...in...很像,不同的是它拿到的是值,可以使用break,return跳出循环,它的本质是调用了[Symbol.iterator]遍历器,原型上要有这个方法才能调用,数组,类数组可以调用,对象原型上面没有这个方法,所以调用不了

image.png

image.png

参考 阮一峰ES6

每天进步一点点!