Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在遍历数组时,应该使用of或forEach吗?_Javascript_Ecmascript 6 - Fatal编程技术网

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类
你需要知道,这个坏家伙是在2015年ES6诞生时出现的。因此,它在使用上提供了很大的灵活性


性能

在性能方面,
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));}