在JavaScript循环语句中,for 和for.in 循环哪个效率更高
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JavaScript循环语句中,for 和for.in 循环哪个效率更高相关的知识,希望对你有一定的参考价值。
用控制台是测不出性能的,因为控制台本质上是个套了一大堆安全机制的eval,它的沙盒化程度很高。用for遍历是比for-in快的,所以数组是决计不要用for-in来遍历的。
需要遍历一个kv的时候,如果它的key数量较多,比如几十上百个,先用Object.getOwnPropertyNames或者Object.keys获取它所有的keys,再使用遍历keys数组的方式来遍历这个kv,速度也会比直接用for-in快。甚至gOPN比keys还快,当然gOPN自然有其坑爹之处,具体要不要用就看具体场合权衡啦。
参考技术A
在看一本《javascript程序员参考手册》,书中提到for...in循环的代码优化://代码优化前
var myArr=[0,1,2,3];
for(var item in myArr)
myArr[item];
解释器遇到for...in 循环时,在后台需要为对象建立一个枚举器(enumerator),这是一个昂贵的操作,所以可将代码优化为:
//代码优化后:
var myArr=[0,1,2,3];
for(var i=0,j=myArr.length;i<j;i++)
myArr[i];
for...in 效率是比较低的
我可以在 Javascript for...in 和 for...of 循环中使用 continue 和 break 吗?
【中文标题】我可以在 Javascript for...in 和 for...of 循环中使用 continue 和 break 吗?【英文标题】:Can I use continue and break in Javascript for...in and for...of loops? 【发布时间】:2019-11-11 22:10:29 【问题描述】:我可以在for...in
和for...of
类型的循环中使用break
和continue
语句吗?或者它们只能在常规 for
循环中访问。
例子:
myObject =
propA: 'foo',
propB: 'bar'
;
for (let propName in myObject)
if (propName !== 'propA')
continue;
else if (propName === 'propA')
break;
【问题讨论】:
为什么不自己试试呢?在条件中添加调试器或控制台日志 这是一个简单的好问题。为什么这不适合 ***? @Persijn 缺乏研究。这太简单了——只需运行已经存在的代码并稍作改动(添加日志语句)就可以找到答案。更不用说数以千计的 其他在线资源了。如果问题是“我可以在代码中使用与propName
不同的名称吗”,您还会说这是一个好问题吗?
我认为这个问题很好,因为我可以看到其他用户正在搜索这个问题。即使可以在其他地方找到答案,我也可以在 *** 上看到这个问题的价值。
@Persijn 这是一个公平的观点。
【参考方案1】:
是的 - 适用于所有循环。
const myObject =
propA: 'foo',
propB: 'bar'
;
for (let propName in myObject)
console.log(propName);
if (propName !== 'propA')
continue;
else if (propName === 'propA')
break;
(循环我的意思是for
,for...in
,for...of
,while
和do...while
,不是forEach
,这实际上是在Array原型上定义的函数.)
【讨论】:
可能有一种方法可以在 forEach 中获得相同的行为。这可能是另一个好问题。 我认为forEach
并不是一个真正的循环,而是一个带有回调参数的函数。此外,break
不限于循环,而是所有blocks (MDN link),这与continue
不同
并非所有块 - 只是循环和切换。
...和标记的块。
哦,是的,那些也是@Teemu。以上是关于在JavaScript循环语句中,for 和for.in 循环哪个效率更高的主要内容,如果未能解决你的问题,请参考以下文章
javascript中,while循环与for循环执行效率上的差异?