电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解JavaScript中哪一種循環最快呢

瀏覽:10日期:2023-10-03 11:14:48

了解哪一種 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 million = 1000000; const arr = Array(million);// 注:這是稀疏數組,應該為其指定內容,否則不同方式的循環對其的處理方式會不同:// const arr = [...Array(million)]console.time(’⏳’);for (let i = arr.length; i > 0; i--) {} // for(倒序) :- 1.5msfor (let i = 0; i < arr.length; i++) {} // for :- 1.6msarr.forEach(v => v) // foreach :- 2.1msfor (const v of arr) {} // for...of :- 11.7msconsole.timeEnd(’⏳’);

造成這樣結果的原因很簡單,在代碼中,正序和倒序的 for 循環幾乎花費一樣的時間,僅僅相差了 0.1 毫秒。原因是,for(倒序)只需要計算一次起始變量 let i = arr.length,而在正序的 for 循環中,它在每次變量增加后都會檢查條件 i<arr.length。這個細微的差別不是很重要,你可以忽略它。(譯者注:在數據量小或對時間不敏感的代碼上,我們大可忽略它,但是根據譯者的測試,當數據量擴大,例如十億,千億等的數量級,差距就顯著提升,我們就需要考慮時間對應用程序性能的影響了。)而 forEach 是 Array 原型的一個方法,與普通的 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(callbackFun); /* 輸出 have - 0 fun - 1 coding - 2 */

需要注意的是,如果我們要使用 forEach,我們不能使用 JavaScript 的短路運算符,即不能在每一次循環中跳過或結束循環。

3. for…of

for…of 是在 ES6(ECMAScript 6)中實現標準化的。它會對一個可迭代的對象(例如 array、map、set、string 等)創建一個循環,并且有一個突出的優點,即優秀的可讀性。

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

需要注意的是,請不要在生成器中使用 for……of,即便 for……of 循環提前終止。在退出循環后,生成器被關閉,并嘗試再次迭代,不會產生任何進一步的結果。

4. for in

for…in 會在對象的所有可枚舉屬性上迭代指定的變量。對于每個不同的屬性,for…in 語句除返回數字索引外,還將返回用戶定義的屬性的名稱。

因此,在遍歷數組時最好使用帶有數字索引的傳統 for 循環。 因為 for…in 語句還會迭代除數組元素之外的用戶定義屬性,就算我們修改了數組對象(例如添加自定義屬性或方法),依然如此。

const details = {firstName: ’john’, lastName: ’Doe’};let fullName = ’’;for (let i in details) { fullName += details[i] + ’ ’; // fullName: john doe}

for…of 和 for…in

for…of 和 for…in 之間的主要區別是它們迭代的內容。for…in 循環遍歷對象的屬性,而 for…of 循環遍歷可迭代對象的值。

let arr= [4, 5, 6];for (let i in arr) { console.log(i); // ’0’, ’1’, ’2’}for (let i of arr) { console.log(i); // ’4’, ’5’, ’6’}結論 for 最快,但可讀性比較差 foreach 比較快,能夠控制內容 for...of 比較慢,但香 for...in 比較慢,沒那么方便

最后,給你一條明智的建議 —— 優先考慮可讀性。尤其是當我們開發復雜的結構程序時,更需要這樣做。當然,我們也應該專注于性能。盡量避免增添不必要的、多余的花哨代碼,因為這有時可能對你的程序性能造成嚴重影響。祝你編碼愉快。

譯者注

在譯者的實際測試中,發現:

不同瀏覽器甚至不同版本,結果會有不一樣(顛倒,例如 Firefox 對原生 for-loop 似乎不太友好,Safari 極度喜歡 while) 不同平臺操作系統處理器,結果會有不一樣

到此這篇關于詳解JavaScript中哪一種循環最快呢的文章就介紹到這了,更多相關JavaScript哪一種循環最內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

原文地址:Which type of loop is fastest in JavaScript?原文作者:kushsavani

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 首页_中夏易经起名网| 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 学考网学历中心| 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 许昌奥仕达自动化设备有限公司 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 事迹材料_个人事迹名人励志故事 学生作文网_中小学生作文大全与写作指导 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 广州迈驰新GMP兽药包装机首页_药品包装机_中药散剂包装机 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 湖北省煤炭供应链综合服务平台| 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 最新电影-好看的电视剧大全-朝夕电影网 | 传爱自考网_传爱自学考试网 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 安规电容|薄膜电容|陶瓷电容|智旭JEC安规电容厂家 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 |