阅读 88

forEach for-in for-of的区别

for 可以使用break跳出循环 continue跳过本次循环

首先最基础的就是for循环了

for(var i=0;i<arr.length;i++){
  if(i==1){
    continue
  }
  console.log(arr[i]);
}

forEach

只能循环数组,不能使用break continue(会直接报错),使用return可以条跳过当前循环,继续后边的

let obj = {a: '1', b: '2', c: '3', d: '4'}
arr.forEach(function (val, idx, arr)
{
  if(idx==1){
    //break
  }
  console.log(val + ', index = ' + idx) // val是当前元素,index当前元素索引,arr数组
  console.log(arr)
})

for in数组或者对象

如下可见 for in 循环遍历的值都是数据结构的键值 可以使用break和continue

let arr = ['a', 'b', 'c', 'd']
for (let o in arr) {
    console.log(o)    
    //log: 0,1,2,3,4
}

for of

是es6新增加的 用来循环获取一对键值对中的值 可以使用break和continue

let arr = ['a', 'b', 'c', 'd']
for (let o of arr) {
  console.log(o)    
//log: a,b,cd
}

https://es6.ruanyifeng.com/#docs/iterator
一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。
for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串

对于普通的对象使用for of会报错


image.png

主要区别

mdn上解释的很清楚
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of
个人理解过来:
for in以任意顺序迭代对象的所有可枚举的属性,包括一个对象上原型上添加的属性等也将会被枚举出来
for of 遍历可迭代对象定义的要迭代的数据

Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};

let iterable = [3, 5, 7];
iterable.foo = 'hello';
for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}

for (let i in iterable) {
  console.log(i); // logs 0 1 2  foo arrCustom  objCustom 
}

作者:vivianXIa

原文链接:https://www.jianshu.com/p/0ca097ae2790

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐