javascript循环语句哪几种,js foreach和for循环区别哪个更快
是JavaScript Web开发领域的“常青树”。无论是JavaScript框架(如Node.js、React、Angular、Vue等。)或者原生JavaScript,拥有非常庞大的粉丝群。先说现代JavaScript。循环一直是大多数编程语言的重要组成部分,现代JavaScript为我们提供了许多迭代或循环值的方法。
但问题是我们是否真的知道哪个循环或迭代最符合我们的需求。for循环有很多变体,比如for,for(逆序),for…of,forEach,for…in,for…await。本文将重点讨论这些问题。
了解哪个for循环或者迭代器适合我们的需求,防止我们犯一些影响应用性能的低级错误。
究竟哪一种循环更快?
答案其实是:(按相反顺序)
最让我惊讶的是,在本地计算机上测试后,我不得不接受for(逆序)是所有for循环中最快的。下面是一个对包含超过一百万个元素的数组执行循环遍历的例子。
声明:console . time()结果的准确性很大程度上取决于我们运行测试的系统配置。您可以在这里了解更多关于准确性的信息。
const百万=1000000;
const arr=数组(百万);
//注意:这是一个稀疏数组,需要指定其内容,否则会被循环以不同的方式进行不同的处理:
//const arr=[.数组(百万)]
console.time();
for(设i=arr.lengthI 0;I i - ) {} //for(逆序):-1.5ms
for(设I=0;长度;I){ }//for:-1.6毫秒
arr . foreach(v=v)//foreach:-2.1毫秒
for (const v of arr) {} //for.的:-11.7毫秒
console.timeEnd();造成这个结果的原因很简单。在代码中,循环的正序和逆序需要的时间几乎相同,仅相差0.1毫秒。原因是for(逆序)只需要计算一次起始变量let i=arr.length,而在正序for循环中,每次变量增加都会检查条件iarr.length。这个细微的差别不是很重要,可以忽略。(译者注:我们可以忽略数据量小或者时间不敏感的代码。但根据翻译者的测试,当数据量膨胀时,比如十亿、一千亿等数量级。差距会显著增大,所以我们需要考虑时间对应用性能的影响。)
ForEach是数组原型的一种方法。与普通的for循环相比,forEach和for…of需要在数组迭代上花费更多的时间。(译者注:但值得注意的是,for…of和forEach都是从对象中获取数据,而原型没有,所以没有可比性。)
循环的类型,以及我们应该在何处使用它们
1. For 循环(正序和倒序)
我想可能大家应该对这个基本循环非常熟悉。我们可以在任何需要运行一段代码的地方使用for循环。最基本的for循环运行速度最快,所以每次都要用,对吧?否则,性能不仅仅是唯一的衡量标准,代码可读性通常更重要,所以让我们选择一个适合我们应用程序的变体。
2. forEach
这个方法需要接受一个回调函数作为输入参数,遍历数组的每个元素,执行我们的回调函数(以元素本身及其索引(可选参数)作为参数给回调函数)。ForEach还允许在回调函数中使用可选参数this。
const things=[have , fun , coding ];
const callbackFun=(item,idex)={
console . log(` $ { item }-$ { index } `);
}
things . foreach(callback fun);
/*输出有-0
乐趣- 1
Coding-2 */需要注意的是,如果要使用forEach,就不能使用JavaScript的短路运算符(,…),也就是不能在每一次循环中跳过或结束循环。
3. for…of
For…of在ES6(ECMAScript 6)中是标准化的。它将为迭代对象(如数组、映射、集合、字符串等)创建一个循环。),而且它有一个突出的优点,就是可读性极好。
const arr=[3,5,7];
const str= hello
对于(让我逮捕){
console.log(一);//输出3,5,7
}
for (let i of str) {
console.log(一);//输出“h”,“e”,“l”,“l”,“o”
}需要注意的是,请不要使用for.即使生成器中的.循环提前终止。退出循环后,生成器关闭,并尝试再次迭代,但没有任何进一步的结果。
4. for in
For…in在对象的所有可枚举属性上迭代指定的变量。对于每个不同的属性,除了数字索引之外,for…in语句还将返回用户定义属性的名称。
因此,在遍历数组时,最好使用带有数字索引的传统for循环。因为for…in语句也会迭代数组元素以外的用户自定义属性,即使我们修改数组对象(比如添加自定义属性或者方法)。
const details={名字: john ,姓氏: Doe };
让全名=“”;
对于(让我详细说明){
full name=details[I] ;//全名:无名氏
}for…of 和 for…in
for…of和for…in的主要区别在于它们迭代的内容。for…in循环遍历对象的属性,而for…of循环遍历可迭代对象的值。
设arr=[4,5,6];
为(让我进来){
console.log(一);//0, 1, 2
}
对于(让我逮捕){
console.log(一);//4, 5, 6
}
结论
For是最快的,但可读性较差。foreach速度更快,可以控制内容。为.的速度较慢,但对于.速度较慢,不太方便。最后,我给你一个明智的建议。3354优先考虑可读性。当我们开发复杂的结构化程序时,这尤其必要。当然,也要注重性能。尽量避免添加不必要的冗余代码,因为这有时会对程序性能产生严重影响。祝你编码愉快。
译者注
在译者的实际测试中,我们发现:
不同的浏览器甚至不同的版本都会有不同的结果(倒过来说,比如Firefox对原生for-loop好像不太友好,Safari喜欢while极了)。不同平台的操作系统处理器会有不同的结果。请访问:编程入门!JavaScript中哪种类型的循环最快?关于几个For循环的详细信息,请关注其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。