Javascript 在遍历数组时,应该使用of或forEach吗?
另外,这是一个风格问题还是一个功能问题?这是一个偏好的问题还是一个更好的问题?我在试着理解这个计划的目的 通常我用Javascript 在遍历数组时,应该使用of或forEach吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,另外,这是一个风格问题还是一个功能问题?这是一个偏好的问题还是一个更好的问题?我在试着理解这个计划的目的 通常我用 let iterable=[10,20,30]; iterable.forEach((val)=>{ 控制台日志(val); })这是一个非常有趣的问题,许多其他网站都讨论过这个问题。我将发布我所读内容的基础知识 ForEach完全属于皇家阵列。forEach方法是在继承数组对象的原型继承的基础上引入的!不用说,forEach子句只适用于作为数组的数据结构。该方法基本上迭代数组元
let iterable=[10,20,30];
iterable.forEach((val)=>{
控制台日志(val);
})
这是一个非常有趣的问题,许多其他网站都讨论过这个问题。我将发布我所读内容的基础知识
ForEach完全属于皇家阵列。forEach方法是在继承数组对象的原型继承的基础上引入的!不用说,forEach子句只适用于作为数组的数据结构。该方法基本上迭代数组元素并执行回调函数[基本上是一些可执行函数/有趣的活动]
for of loop对于JS世界来说是全新的,并且拥有强大的力量!瞧!for of循环创建了一个循环,该循环在iterable成员对象上迭代。该列表非常广泛,例如
- 排列
- 地图
- 设置
- 串
- 打字机
- 其他W3C类
性能 在性能方面,
for…of
比forEach
更快
forEach
的速度比的速度慢24%
更新
W3C规范中还有其他几个iterable类,如我前面提到的FileList。在W3C的最新草案中(大约在ES6发布时),像HTMLCollection和NodeList这样的集合现在也实现了forEach(),而不仅仅是数组。借
来源链接:
我建议在ES6中始终使用来表示
- 它对任何人都有效
- 它支持循环体中的各种控制流,如
continue
,break
,return
,yield
和wait
我个人也觉得它更具可读性,但这取决于我的偏好。有些人认为forEach是一种功能性更强的样式,但这是错误的——它没有结果值,只会产生副作用,因此命令式循环更符合这一目的
性能不是一个问题。我不会说这完全是基于意见的,因为forEach
和for/of
之间肯定存在一些差异。例如,For/of
可用于迭代生成器,而forEach
不能。因此,这不仅仅是偏好的问题。例如,有些iterables没有像a一样的forEach()
。除了不实现forEach()
的iterables之外,这纯粹是一个偏好问题。该列表只提到ECMAScript规范中的类。W3C规范中还有几个其他的iterable类,如我前面提到的FileList
。在W3C的最新草案中(大约在ES6发布时),像HTMLCollection
和NodeList
这样的集合现在也实现了forEach()
,而不仅仅是Array
。在最新的firefox中,forEach
比for of
更快,但在chrome中,for of
更快。这似乎取决于浏览器javascript引擎。Mozilla使用SpiderMonkey,而Chrome使用ChromeV8。也许forEach
和for…of
的实现是不同的。await
实际上可以在forEach循环中使用,我认为这实际上更容易。使用
for of时,您必须将整个过程包装在一个异步函数中。使用forEach
可以使回调异步:[1,2,3].forEach(异步(值)=>{await new Promise(resolve=>console.log(值))}
@Forivin,循环将不会被等待。您的代码相当于创建承诺,而根本不使用async
/wait
。好吧,它确实有效,用例只是不同的,不寻常的。但是承诺执行者实际上会被调用。对于不同的用例,您根本不需要wait
,因此您可以只为(const value of[1,2,3]){new promise(resolve=>console.log(value));}