博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中的 for...in, for...of, for 和 forEach 循环的区别
阅读量:4129 次
发布时间:2019-05-25

本文共 1542 字,大约阅读时间需要 5 分钟。

for…in和for…of的区别

  • for … in 获取的是对象的键名key;for … of遍历获取的是对象的键值value
    • 如果要通过for…of循环,获取数组的索引,可以借助数组实例的 entries() 方法和 keys() 方法
  • for … in 会遍历对象的整个原型链,性能非常差不推荐使用;而 for … of 只遍历当前对象,不会遍历原型链
  • 对于数组的遍历:for … in会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for … of只返回数组的下标对应的属性值
var arr = ['a', 'b', 'c', 'd'];for (let a in arr) {  console.log('forin', a); // 0 1 2 3}for (let a of arr) {  console.log('forof', a); // a b c d}

结果:

---for in 打印的是索引forin 0forin 1forin 2forin 3---for of 打印的是值forof aforof bforof cforof d

   

for

优点:程序简洁,结构清晰,循环初始化,循环变量化,循环体和循环条件位置突出

缺点:结构比while循环复杂,容易出编码错误

//for//它和forEach,forof一样不可以遍历对象//解决办法:就是把对象先转化为数组类型let obj = {a:1, b:2, c:3}let obj2 = Object.keys(obj)  //用Object.keys属性转化for(let i=0; i

结果:

obj2 aobj2 bobj2 c

 

for...in(主要用于遍历对象

for … in 获取的是对象的键名 key数组的键名是数字,但是 for…in 循环是的index是string类型的:以字符串作为键名“0”、“1”、“2”等等。

用于循环遍历数组对象属性。

优点:可以遍历数组的键名,遍历对象简洁方便;    

缺点:某些情况下可能开销较大

eg1. for...in遍历对象

//for...in遍历对象let obj = {a:1, b:2, c:3}for(let i in obj){  console.log('obj', obj[i])}

结果:

obj 1obj 2obj 3

eg2. for...in遍历数组

//for...in遍历数组let array=[1, 2, 3, 4, 5]for (let i in array){  console.log('array', array[i])}

结果:

array 1array 2array 3array 4array 5

 

for...of(ES6新增,利用了遍历对象内部的iterator接口,主要用于遍历数组)

for … of遍历获取的是对象的键值 value (值是什么就打印什么)

     1.目前遍历 数组 最便利的方法

     2.避免了for-in,forEach的所有缺陷(可以使用break,continue和return
     3.可以用在 类数组,字符串,set和map数据 上
     4.不支持对象的遍历(但是它提供了其他的三种方法)
            ①Object.keys()
            ②Object.values()
            ③Object.entries()

 

forEach

(三个参数,第一个是value,第二个是index,第三个是数组体)

优点:不用关心集合下标的问题,减少了出错的效率

缺点:不能同时遍历多个集合,方法不能使用break,continue语句跳出循环,不能使用return从函数体返回,对于空数组不会执行回调函数

 

 

转载地址:http://uiuvi.baihongyu.com/

你可能感兴趣的文章
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...
查看>>
浅谈JavaScript的语言特性
查看>>
LeetCode第39题思悟——组合总和(combination-sum)
查看>>
LeetCode第43题思悟——字符串相乘(multiply-strings)
查看>>
LeetCode第44题思悟——通配符匹配(wildcard-matching)
查看>>
LeetCode第45题思悟——跳跃游戏(jump-game-ii)
查看>>
LeetCode第46题思悟——全排列(permutations)
查看>>
LeetCode第47题思悟—— 全排列 II(permutations-ii)
查看>>
LeetCode第48题思悟——旋转图像(rotate-image)
查看>>
驱动力3.0,动力全开~
查看>>
记CSDN访问量10万+
查看>>
Linux下Oracle数据库账户被锁:the account is locked问题的解决
查看>>
记CSDN访问20万+
查看>>
Windows 环境下Webstorm 2020.3 版本在右下角找不到Git分支切换部件的一种解决方法
查看>>
Electron-Vue项目中遇到fs.rm is not a function问题的解决过程
查看>>
飞机换乘次数最少问题的两种解决方案
查看>>
有向无回路图的理解
查看>>
设计模式中英文汇总分类
查看>>
WPF实现蜘蛛纸牌游戏
查看>>
单例模式
查看>>