本文对比总结了四种遍历数组的方法:for循环:for(letindex=0;index{console.log(elem,index);});for-of循??环:for(constelemofsomeArray){console.log(elem);}for-of通常是最好的选择。我们会看看为什么。for循环[ES1]JavaScript中的for循环很古老,从ECMAScript1开始就有了。for循环记录了arr的每个元素的索引和值:constarr=['a','b','c'];arr.prop='propertyvalue';for(letindex=0;index{console.log(elem,index);});//输出://'a',0//'b',1//'c',2这种方法非常方便:它使我们无需进行大量操作即可访问数组元素和索引。如果使用箭头函数(在ES6中引入),语法上会更优雅。.forEach()的主要缺点是它不能在其循环体内使用await。提前退出.forEach()循环是不可能的。而break可以用在for循环中。中止.forEach()的解决方法如果您想中止.forEach()之类的循环,有一个解决方法:.some()也循环遍历所有数组元素并在其回调返回true时停止。constarr=['red','green','blue'];arr.some((elem,index)=>{if(index>=2){returntrue;//中止循环}console.log(elem);//此回调隐式返回`undefined`,它//是一个虚拟值。因此,循环继续。});//Output://'red'//'green'可以说这是对.some()的滥用,相对于for-of和break来说,这段代码不太好理解。for-of循??环[ES6]for-of循??环在ECMAScript6中得到支持:constarr=['a','b','c'];arr.prop='propertyvalue';for(constelemofarr){console.log(elem);}//Output://'a'//'b'//'c'for-of在数组循环时非常有效:用于遍历数组元素。如果需要,您可以使用await并轻松迁移到for-await-of。您甚至可以对外部范围使用break和continue。for-of和可迭代对象for-of不仅可以遍历数组,还可以遍历可迭代对象,比如遍历Map:constmyMap=newMap().set(false,'no').set(true,'yes');for(const[key,value]ofmyMap){console.log(key,value);}//输出://false,'no'//true,'yes'遍历myMap会生成[key,value]对,每对数据都可以通过解构直接访问。for-of和数组索引数组方法.entries()返回一个可迭代的[index,value]对。如果你使用for-of和解构这个方法,访问数组索引是很方便的:log(index,elem);}//Output://0,'chocolate'//1,'vanilla'//2,'strawberry'总结了for-of循环比for,for-in和.forEach的可用性()更好。通常四种循环机制之间的性能差异应该是微不足道的。如果您正在做一些计算量大的事情,那么切换到WebAssembly可能会更好。