最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【译】JavaScript 中几种循环遍历方式对比

    正文概述 掘金(KooFE前端团队)   2021-02-09   512

    JavaScript 在 Web 开发上占有举足轻重的地位,无论是 NodeJS、React、Angular、Vue 等各种 JavaScript 框架, 还是 vanilla JS(译者注:这是个梗,指原生JavaScript) 都有大量的粉丝簇拥。循环作为编程语言中不可或缺的一部分,JavaScript 提供了多种支持循环遍历的方法,比如 forfor(reverse)for...offoreachfor...infor...await。但是问题是,如何在这些的循环遍历方法中,选择最适合我们需求的那个呢?这就是本文将要展开讨论的问题。

    哪种循环遍历方法最快?

    答案是:for(reverse)

    在个人电脑上,对这几种遍历方式进行测试,最终得出了 for(reverse) 是最快的循环遍历。测试的方法是,遍历一个有 100 万个元素的数组,计算出整个过程的耗时,代码如下:

    const million = 1000000; 
    const arr = Array(million);
    console.time('⏳');
    
    for (let i = arr.length; i > 0; i--) {} // for(reverse) :- 1.5ms
    for (let i = 0; i < arr.length; i++) {} // for          :- 1.6ms
    
    arr.forEach(v => v)                     // foreach      :- 2.1ms
    for (const v of arr) {}                 // for...of     :- 11.7ms
    
    console.timeEnd('⏳');
    

    这里 for 的正向遍历和反向遍历耗时几乎是一样的,只有 0.1ms 的差异。原因是 for(reverse) 只进行一次 let i = arr.length , 而在 for 中每次都要进行 i < arr.length 判断,针对这点细微的差别可以忽略。和 for 相比,foreachfor...of 在数组遍历过程会更耗时。

    不同循环遍历方法的应用场景

    for 循环

    for 是大家较为熟悉的循环遍历方式,而且它的遍历速度是最快的,那是不是什么场景都推荐用 for 呢?答案是否定的,因为除了要考虑性能因素之外,代码的可读性通常更为重要。

    forEach

    const things = ['have', 'fun', 'coding'];
    const callbackFun = (item, idex) => {
        console.log(`${item} - ${index}`);
    }
    things.foreach(callbackFun); 
    
    o/p:- have - 0
          fun - 1
          coding - 2
    

    forEach 在数组遍历过程中,不能被 breakreturn 提前结束循环。

    for ... of

    for...of 是 ES6 支持的特性,用于遍历可迭代的对象,例如 StringArrayMapSet 等,它对于代码可读性比较好。

    const arr = [3, 5, 7];
    const str = 'hello';
    for (let i of arr) {
       console.log(i); // logs 3, 5, 7
    }
    for (let i of str) {
       console.log(i); // logs 'h', 'e', 'l', 'l', 'o'
    }
    

    for...in

    for...in 可以遍历访问对象的所有可枚举属性。当用 for...in 访问数组的时候,除了返回数组的索引之外,数组上的用户自定义属性也会被返回,所以要避免用 for...in 遍历数组。

    const array = ['k', 'o', 'o'];
    
    array.koo = true;
    
    for (const key in array) {
      console.log(key); // 顺次打印 '0', '1', '2', 'koo'
    }
    

    总结

    • for 速度最快, 但可读性差
    • foreach 速度快, 可控制属性
    • for...of 比较慢, 但好用
    • for...in 比较慢, 最不好用

    最后给一个建议,把代码的可读性放在第一位。当开发一个复杂的结构(系统)时,代码可读性是必不可少的,但是也应该关注性能。尽量避免在代码中添加不必要的东西,以减少对应用程序性能造成的影响。


    参考阅读

    • Using 'ForOfStatement' is not allowed
    • Array iteration methods summarized
    • Airbnb JavaScript Style Guide

    关注公众号

    【译】JavaScript 中几种循环遍历方式对比


    起源地下载网 » 【译】JavaScript 中几种循环遍历方式对比

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元