for of, for in, forEach比较

智码捕手说
• 阅读 2713

forEach

forEach无法中途跳出forEach循环,break、continue和return都不奏效。
forEach 只支持同步代码,forEach 并不会去处理异步的情况

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配合使用。
支持异步

遍历对象时,推荐使用for in,使用for of会报错
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
JS中arr.forEach()如何跳出循环
示例我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用break会报错,使用return也不能跳出循环。使用break将会报错:vararr使用return也不能跳出整个循环:vararr那么在用forEach()遍历数组时要如何才能跳出循环呢?经过查找资料后,我找到了两种方法可以实现跳出
LinMeng LinMeng
4年前
js 的 forEach,map,filter,some,every,find(es6),reduce详解
forEach()定义和用法forEach()方法用于调用数组的每个元素,并将元素传递给回调函数注意:forEach()对于空数组是不会执行回调函数的。语法array.forEach(function(currentValue,index,arr),thisValue)参数function(currentValue,index,a
待兔 待兔
4年前
Java中遍历HashMap的5种方式
本教程将为你展示Java中HashMap的几种典型遍历方式。如果你使用Java8,由于该版本JDK支持lambda表达式,可以采用第5种方式来遍历。如果你想使用泛型,可以参考方法3。如果你使用旧版JDK不支持泛型可以参考方法4。1、通过ForEach循环进行遍历importjava.io.IOException;importjav
Souleigh ✨ Souleigh ✨
4年前
请纠正这5个PHP编码小陋习
在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。在循环之前测试数组是否为空$items;//...if(count($items)0){foreach($itemsas$item){//processon$item...
Stella981 Stella981
3年前
Mybatis之foreach用法
在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件。特此记录下不同情况下书写方式!仅供大家参考1\.foreach元素的属性collection:需做foreach(遍历)的对象,作为入参时,list、array对象时,collection属性
Stella981 Stella981
3年前
ADVtree
循环第一个根节点(Nodes0)下的子节点(Node)并添加子节点foreach(NodetninclTree1.advTree1.Nodes0.Nodes){NodennewNode();
Stella981 Stella981
3年前
PHP巧用call_user_func避免全局变量污染
我们在编写复杂的业务逻辑中,经常需要对数组做循环处理。例如:$array'crazymus','tom','jim';foreach($arrayas$key$value){echo$key,PHP_EOL;echo$value
Stella981 Stella981
3年前
Shell编程基础
本文索引:for循环while循环break跳出循环continue结束本次循环exit退出整个脚本for循环语法:for变量名in条件;do...;donefor循环实例循环计算计算1100的和!/bin/b
Wesley13 Wesley13
3年前
JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。  JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。1、for循环遍
小万哥 小万哥
1年前
C++ Break、Continue 和 数组操作详解
CBreak和Continuebreak语句还可以用来跳出循环。在以下示例中,当i等于4时跳出循环:cppfor(inti0;i<10;i)if(i4)break;cout<<i<<"\n";CContinue以下示例跳过了值为4的情况:cpp
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(