成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

詳解JavaScript中哪一種循環(huán)最快呢

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

了解哪一種 for 循環(huán)或迭代器適合我們的需求,防止我們犯下一些影響應用性能的低級錯誤。

JavaScript 是 Web 開發(fā)領(lǐng)域的“常青樹”。無論是 JavaScript 框架(如 Node.js、React、Angular、Vue 等),還是原生 JavaScript,都擁有非常龐大的粉絲基礎(chǔ)。我們來談?wù)劕F(xiàn)代 JavaScript 吧。循環(huán)一直是大多數(shù)編程語言的重要組成部分,而現(xiàn)代 JavaScript 為我們提供了許多迭代或循環(huán)值的方法。但問題在于,我們是否真的知道哪種循環(huán)或迭代最適合我們的需求。for 循環(huán)有很多變形,例如 for、for(倒序)、for…of、forEach、for…in、for…await。本文將圍繞這些展開討論。

究竟哪一種循環(huán)更快?

答案其實是: for(倒序)

最讓我感到驚訝的事情是,當我在本地計算機上進行測試之后,我不得不接受 for(倒序)是所有 for 循環(huán)中最快的這一事實。下面我會舉個對一個包含超過一百萬項元素的數(shù)組執(zhí)行一次循環(huán)遍歷的例子。聲明:console.time() 結(jié)果的準確度在很大程度上取決于我們運行測試的系統(tǒng)配置。你可以在此處對準確度作進一步了解。

const million = 1000000; const arr = Array(million);// 注:這是稀疏數(shù)組,應該為其指定內(nèi)容,否則不同方式的循環(huán)對其的處理方式會不同:// 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(’⏳’);

造成這樣結(jié)果的原因很簡單,在代碼中,正序和倒序的 for 循環(huán)幾乎花費一樣的時間,僅僅相差了 0.1 毫秒。原因是,for(倒序)只需要計算一次起始變量 let i = arr.length,而在正序的 for 循環(huán)中,它在每次變量增加后都會檢查條件 i<arr.length。這個細微的差別不是很重要,你可以忽略它。(譯者注:在數(shù)據(jù)量小或?qū)r間不敏感的代碼上,我們大可忽略它,但是根據(jù)譯者的測試,當數(shù)據(jù)量擴大,例如十億,千億等的數(shù)量級,差距就顯著提升,我們就需要考慮時間對應用程序性能的影響了。)而 forEach 是 Array 原型的一個方法,與普通的 for 循環(huán)相比,forEach 和 for…of 需要花費更多的時間進行數(shù)組迭代。(譯者注:但值得注意的是,for…of 和 forEach 都從對象中獲取了數(shù)據(jù),而原型并沒有,因此沒有可比性。)

循環(huán)的類型,以及我們應該在何處使用它們1. For 循環(huán)(正序和倒序)

我想,也許大家都應該對這個基礎(chǔ)循環(huán)非常熟悉了。我們可以在任何我們需要的地方使用 for 循環(huán),按照核定的次數(shù)運行一段代碼。最基礎(chǔ)的 for 循環(huán)運行最迅速的,那我們每一次都應該使用它,對嗎?并不然,性能不僅僅只是唯一尺度,代碼可讀性往往更加重要,就讓我們選擇適合我們應用程序的變形即可。

2. forEach

這個方法需要接受一個回調(diào)函數(shù)作為輸入?yún)?shù),遍歷數(shù)組的每一個元素,并執(zhí)行我們的回調(diào)函數(shù)(以元素本身和它的索引(可選參數(shù))作為參數(shù)賦予給回調(diào)函數(shù))。forEach 還允許在回調(diào)函數(shù)中使用一個可選參數(shù) 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 的短路運算符,即不能在每一次循環(huán)中跳過或結(jié)束循環(huán)。

3. for…of

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

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 循環(huán)提前終止。在退出循環(huán)后,生成器被關(guān)閉,并嘗試再次迭代,不會產(chǎn)生任何進一步的結(jié)果。

4. for in

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

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

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 之間的主要區(qū)別是它們迭代的內(nèi)容。for…in 循環(huán)遍歷對象的屬性,而 for…of 循環(huán)遍歷可迭代對象的值。

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’}結(jié)論 for 最快,但可讀性比較差 foreach 比較快,能夠控制內(nèi)容 for...of 比較慢,但香 for...in 比較慢,沒那么方便

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

譯者注

在譯者的實際測試中,發(fā)現(xiàn):

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

到此這篇關(guān)于詳解JavaScript中哪一種循環(huán)最快呢的文章就介紹到這了,更多相關(guān)JavaScript哪一種循環(huán)最內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

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

標簽: JavaScript
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91在线丨porny丨国产| 一区二区高清| 一区二区在线看| 91视频www| 日韩一区二区三区四区五区六区| 天天综合网天天综合色| 91久久视频| 国产欧美日韩亚州综合| yourporn久久国产精品| 欧美精品一二三区| 色欧美88888久久久久久影院| 欧美精选一区| 欧美视频完全免费看| 九九精品一区二区| 亚洲精品国产精华液| 亚洲激情二区| 美国av一区二区| 亚洲女厕所小便bbb| 91精品国产综合久久小美女| 95精品视频在线| 久久精品久久99精品久久| 欧美日韩一区二区三区视频| 欧美88av| 国产亚洲美州欧州综合国| 成人国产亚洲欧美成人综合网| 91精品国产综合久久国产大片| 久久 天天综合| 色综合久久久久综合体桃花网| 午夜电影久久久| 久久婷婷丁香| 免费精品视频在线| 欧美日韩免费视频| 国产久卡久卡久卡久卡视频精品| 在线不卡的av| 国产成人精品午夜视频免费| 日韩欧美国产成人一区二区| av亚洲精华国产精华精华| 国产亚洲精品久| 亚洲午夜精品福利| 亚洲乱码日产精品bd| 亚洲欧美日韩专区| 视频一区在线视频| 91久久精品日日躁夜夜躁欧美| 麻豆精品一区二区| 91精品国产综合久久香蕉的特点| 成人国产精品免费| 国产日产欧美一区| 亚洲精品1234| 五月综合激情网| 欧美美女一区二区三区| 成人免费福利片| 国产日产欧美一区二区三区| 亚洲国产午夜| 午夜精品久久久久影视| 91福利资源站| 国产成人精品影视| 国产欧美一区二区在线| 精品91视频| 偷拍与自拍一区| 555夜色666亚洲国产免| 91麻豆国产在线观看| 亚洲人成小说网站色在线| 久久天堂精品| 丁香六月久久综合狠狠色| 欧美高清在线视频| 国产精品入口| 激情av综合网| 国产女同互慰高潮91漫画| 日韩午夜激情| 免费成人av在线播放| 欧美videossexotv100| 亚洲欧洲精品一区二区| 婷婷中文字幕一区三区| 欧美人牲a欧美精品| 不卡欧美aaaaa| 亚洲欧美一区二区三区极速播放| 一本高清dvd不卡在线观看| 国产不卡视频一区| 中文字幕一区二区三区在线播放| 久久午夜精品| 不卡的电影网站| 亚洲一级二级在线| 欧美日韩综合不卡| 欧美连裤袜在线视频| 亚洲777理论| 日韩欧美中文字幕一区| 精品福利电影| 久久99精品久久久久婷婷| 久久精品视频在线看| 久久久99国产精品免费| 成人av午夜影院| 亚洲国产成人va在线观看天堂| 欧美一区二区高清| 1024亚洲| 国产电影一区二区三区| 亚洲精品亚洲人成人网在线播放| 欧美日韩国产一二三| 亚洲调教视频在线观看| 激情综合网最新| 1000部国产精品成人观看| 欧美视频一二三区| 欧美日韩在线一区二区三区| 免费在线观看精品| 久久久综合视频| 色哟哟亚洲精品| 欧美承认网站| 麻豆国产精品一区二区三区| 亚洲国产精品成人综合| 欧美日韩dvd在线观看| 亚洲激情网站| 国产成+人+日韩+欧美+亚洲| 亚洲成人在线免费| 国产午夜亚洲精品羞羞网站| 欧美自拍偷拍一区| 黄色成人在线网址| 国产很黄免费观看久久| 亚洲成av人片在线观看无码| 久久久久久久久99精品| 欧美性受极品xxxx喷水| 亚洲人妖在线| 91色在线porny| 精品亚洲免费视频| 夜夜嗨av一区二区三区四季av| 欧美精品一区二区三区在线| 91高清视频免费看| 亚洲日本欧美| 91色视频在线| 国产福利精品一区| 日韩av网站免费在线| 最新成人av在线| 2021中文字幕一区亚洲| 正在播放亚洲| 91国在线观看| 欧美电影精品一区二区| 国产精品欧美一区喷水| 国产精品国产三级国产专播品爱网| 亚洲成人动漫精品| 久草在线在线精品观看| 国内精品久久久久久久果冻传媒| 国产精品私人影院| 欧美日韩中文字幕一区| 国产日韩欧美二区| 午夜久久一区| 盗摄精品av一区二区三区| 久久精品国产在热久久| 亚洲第一综合色| 亚洲欧美一区二区视频| 久久奇米777| 欧美日韩亚洲综合一区| 久久激情久久| 国产欧美日韩视频一区二区三区| 欧美一区免费视频| 粉嫩aⅴ一区二区三区四区| 玖玖九九国产精品| 午夜精品福利在线| 樱花草国产18久久久久| 亚洲国产成人在线| 2023国产精华国产精品| 欧美一区二区黄色| 欧美高清视频不卡网| 欧美私人免费视频| 久久一二三区| 亚洲一区二区四区| 在线日韩电影| 亚洲天堂成人| 狠狠色综合网| 在线精品亚洲| 国精品一区二区| 欧美日韩综合网| 午夜精品视频在线观看一区二区| www.亚洲色图| 国产成人精品免费视频网站| 国精品**一区二区三区在线蜜桃| 裸体一区二区三区| 日本不卡视频在线观看| 午夜伦理一区二区| 亚洲国产成人高清精品| 亚洲制服欧美中文字幕中文字幕| 综合婷婷亚洲小说| 亚洲免费视频成人| 亚洲伦理在线精品| 亚洲欧洲日韩在线| 中文字幕亚洲精品在线观看| 久久久五月婷婷| 久久久久久久网| 欧美激情一区二区三区| 国产性天天综合网| 国产精品国产馆在线真实露脸| 国产精品不卡一区二区三区| 日韩一区在线免费观看| 国产精品久久久久久亚洲伦| 中文字幕一区三区| 一区二区日韩av| 亚洲成a人片在线不卡一二三区| 亚洲国产精品自拍| 午夜精品福利在线| 精品亚洲aⅴ乱码一区二区三区| 狠狠色丁香久久婷婷综| 不卡一区在线观看| 国产综合亚洲精品一区二|