日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:31日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
999国产精品视频| 91亚洲国产高清| 婷婷亚洲五月| 日韩中文在线播放| 色婷婷久久久| 亚洲欧美伊人| 国产精品7m凸凹视频分类| 日韩精品免费一区二区三区| 日韩欧美一区二区三区在线观看| 麻豆网站免费在线观看| 日韩大片免费观看| 欧美日韩视频免费观看| 99久久久国产精品美女| 亚洲欧洲一区| 亚洲精品系列| 午夜在线视频观看日韩17c| 日韩中文字幕1| 日本一区免费网站| 国产调教精品| 成人高清一区| 99精品美女| 亚洲一区免费| 日韩黄色av| 国产精品一区三区在线观看| 国产69精品久久| 国产一区二区三区自拍| 国产手机视频一区二区| 亚洲精品影院在线观看| 免费在线欧美黄色| 久久三级视频| 一区在线视频观看| 日本成人在线视频网站| 精品国产中文字幕第一页| 97国产成人高清在线观看| 久久九九99| 中文字幕亚洲精品乱码| 国产精品成人**免费视频| 青青久久av| 三级一区在线视频先锋| 国产三级一区| 99tv成人| 日本中文字幕视频一区| 国产一区丝袜| 亚洲少妇一区| 久久国产人妖系列| 老鸭窝一区二区久久精品| 国产v日韩v欧美v| 国产精品嫩草99av在线| 国产精品伦一区二区| 蜜臀久久精品| 蜜桃91丨九色丨蝌蚪91桃色| 国产乱码精品一区二区三区四区 | 精品欧美视频| 亚洲激情中文| 日本午夜精品| 麻豆精品蜜桃| 日韩av影院| 丝袜美腿诱惑一区二区三区 | 午夜欧美精品| 国产欧美日韩精品一区二区三区| 亚洲不卡系列| 国产亚洲观看| 成人av二区| 国产精品玖玖玖在线资源| 亚洲一级二级| 国产精品亚洲欧美日韩一区在线| 久久中文字幕av一区二区不卡| 亚洲+小说+欧美+激情+另类| 欧美精品国产| 99riav国产精品| 久久精品国产精品亚洲毛片| 亚洲专区欧美专区| 国产伦久视频在线观看| 日本在线成人| 夜夜嗨一区二区| 日韩专区精品| 欧美激情久久久久久久久久久| 亚洲一区有码| 久久中文亚洲字幕| 成人在线视频中文字幕| 日产欧产美韩系列久久99| 亚洲国产综合在线看不卡| 欧美激情综合| 国产一区导航| 日本精品不卡| 免费在线亚洲| 日韩国产在线观看| 国产免费成人| 午夜影院一区| 久久97久久97精品免视看秋霞| 久久夜色精品| 99久精品视频在线观看视频| 久久精品国产免费| 欧美视频二区| 日韩免费精品| 首页欧美精品中文字幕| 欧美日韩视频网站| 精品九九在线| 欧美一区成人| 亚洲ww精品| 国产亚洲精品久久久久婷婷瑜伽| 偷拍精品精品一区二区三区| 老鸭窝一区二区久久精品| 日韩精品一级| 日韩中文字幕不卡| 午夜欧美精品久久久久久久| 国产综合色区在线观看| 久久精品人人| 国产精品欧美在线观看| 日本欧美一区二区| 三级一区在线视频先锋| 国产一区导航| 伊人成人在线视频| 中文字幕系列一区| 精品国产a一区二区三区v免费| 日韩avvvv在线播放| 日本中文字幕不卡| 亚洲视频二区| 美国三级日本三级久久99| 99pao成人国产永久免费视频 | 蜜乳av另类精品一区二区| 欧美日韩日本国产亚洲在线| 久久一级电影| 亚洲午夜视频| 伊人久久大香线蕉av不卡| 四虎国产精品免费观看| 精品三级av| 国产不卡精品| 91一区二区| 午夜影院一区| 国产中文一区| 激情视频一区二区三区| 亚洲精品在线影院| 久久久久久久久丰满| 欧美 日韩 国产精品免费观看| jiujiure精品视频播放| 亚洲一区二区毛片| 日韩专区一卡二卡| 亚洲人成亚洲精品| 日韩av中文字幕一区二区三区| 日本欧美大码aⅴ在线播放| 亚洲精品黄色| 国产乱论精品| 成人在线免费观看91| 久久国产日韩| 久久久精品午夜少妇| 九色精品91| 亚洲精品成人一区| 国产日韩欧美高清免费| 丁香婷婷久久| 欧美特黄一级大片| 亚洲综合日本| 日本a级不卡| 久久久久久亚洲精品美女| 精品国产欧美日韩| 日韩网站中文字幕| 九色精品91| 日本亚洲视频在线| 免费亚洲一区| 亚洲高清不卡| 婷婷五月色综合香五月| 美女视频黄免费的久久| 中文字幕系列一区| 美国三级日本三级久久99| 国产视频网站一区二区三区| 成人精品久久| 99pao成人国产永久免费视频| 涩涩涩久久久成人精品| 精品中文字幕一区二区三区| 久久久五月天| 日韩精品欧美精品| 欧美亚洲福利| 美女网站视频一区| 中文字幕一区二区精品区| 国产精品美女午夜爽爽| 日韩精品首页| 日韩av不卡一区二区| 特黄毛片在线观看| 蜜臀久久99精品久久久久久9| 欧美精品二区| 午夜久久美女| 国产精品天堂蜜av在线播放| 色综合www| 日本一区二区三区视频在线看 | 日本国产欧美| 日韩欧美三级| 国产精品成久久久久| 免费在线观看视频一区| 国产精品一区二区av交换 | 欧美日韩精品一本二本三本| 日本色综合中文字幕| 日本不卡免费高清视频在线| 视频一区中文字幕国产| 精品丝袜久久| 中文字幕视频精品一区二区三区| 国产欧美亚洲精品a| 国产精品毛片| 91一区二区三区四区| 亚洲91网站| 五月精品视频|