這篇文章給大家分享的是有關(guān)JavaScript中for循環(huán)怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
在興化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,興化網(wǎng)站建設(shè)費(fèi)用合理。前言
對(duì)于for循環(huán),相信大家再常用不過了。但是這回說下for循環(huán)是因?yàn)榭创a時(shí)我居然沒有看明白一個(gè)for循環(huán)的意思,真是不應(yīng)該啊。
這個(gè)for循環(huán)是這么寫的:
for (var i = 0, rule; rule = rules[i++];) { //do something }
這個(gè)寫法是什么意思呢?后面再說,現(xiàn)賣個(gè)關(guān)子,這個(gè)寫法我感覺還是挺好的。
for循環(huán)寫法對(duì)效率的影響
說上面那段代碼之前,先說一下for循環(huán)的效率問題。在接觸js時(shí)關(guān)于for循環(huán)的寫法和對(duì)效率影響的文章挺不少的。但總的來說對(duì)于for循環(huán)的寫法有這么兩種:
不寫聲明變量的寫法:for(var i = 0;i
寫聲明變量的寫法:for(var i = 0,len = arr.length;i < len;i++){}
除了for循環(huán)還有forEach()
,也有文章說forEach()
效率最高,推薦用forEach()
寫法,那么到底哪個(gè)效率高呢?做個(gè)測(cè)試來看看吧。
測(cè)試方案
總的測(cè)試方案如下:
做一個(gè)容納4千萬的測(cè)試數(shù)組變量。
分別用兩種寫法的for循環(huán)和foreach對(duì)這個(gè)測(cè)試變量進(jìn)行遍歷。
在同一臺(tái)穩(wěn)定機(jī)器上,進(jìn)行10次測(cè)試,最后取平均值。
測(cè)試環(huán)境:CPU:Inter(R) Core i5-3210M,RAM:12GM,system:win10(x64)
測(cè)試流程
制作測(cè)試變量
先用while循環(huán)做個(gè)測(cè)試變量出來,這個(gè)很簡(jiǎn)單,具體如下:
var testArrs = [], i = 0; while(i<40000000){ testArrs.push(i); i++; }
編寫相應(yīng)測(cè)試函數(shù)
測(cè)量和執(zhí)行時(shí)間的代碼,我用的是console.time()
和console.timeEnd()
來進(jìn)行測(cè)試。
針對(duì)這個(gè)三個(gè)for循環(huán),先做出三個(gè)函數(shù)出來,他們分別是
foreach循環(huán)測(cè)試:
function testForeach(testArrs){ console.time('foreach'); var newArrs = []; testArrs.forEach(function(i){ newArrs.push(i); }); console.timeEnd('foreach'); }
沒有聲明變量的for循環(huán):
function testNoDeclare(testArrs){ console.time('no declare'); var newArrs = []; for(var i = 0;i有變量聲明的寫法
function testUseDeclare(testArrs){ console.time('use declare'); var newArrs = []; for(var i = 0,len = testArrs.length;i執(zhí)行測(cè)試函數(shù)
執(zhí)行測(cè)試函數(shù)這里很簡(jiǎn)單啦,就是調(diào)用函數(shù)就可以了
testForeach(testArrs); testNoDeclare(testArrs); testUseDeclare(testArrs);測(cè)試結(jié)果
經(jīng)過10次測(cè)試,得到了以下結(jié)果
foreach 不寫聲明 寫聲明 2372.891ms 672.530ms 743.974ms 2431.821ms 710.275ms 805.676ms 2422.448ms 729.287ms 741.014ms 2330.894ms 730.200ms 755.390ms 2423.186ms 703.255ms 769.674ms 2379.167ms 689.811ms 741.040ms 2372.944ms 712.103ms 710.524ms 2316.005ms 726.518ms 726.522ms 2535.289ms 733.826ms 747.427ms 2560.925ms 793.680ms 817.098ms 平均值 平均值 平均值 2414.56ms 720.15ms 755.83ms 不知道結(jié)果有沒有讓你出乎意料呢?沒想到最平常的寫法效率最高,為什么?我也沒想明白,誰(shuí)知道就告訴我吧,但我估計(jì)寫聲明的寫法是沒有意義的。因?yàn)?code>len = arr.length這個(gè)
arr.length
可能已經(jīng)緩存起來了,所以我們?cè)诼暶鱾€(gè)len變量來存儲(chǔ)是沒有意義的。最后附上全部測(cè)試代碼,復(fù)制到自己的電腦上直接就可以測(cè)試了,要是有不合理的地方請(qǐng)告訴我吧
var testArrs = [], i = 0; while(i<40000000){ testArrs.push(i); i++; } function testForeach(testArrs){ console.time('foreach'); var newArrs = []; testArrs.forEach(function(i){ newArrs.push(i); }); console.timeEnd('foreach'); } function testNoDeclare(testArrs){ console.time('no declare'); var newArrs = []; for(var i = 0;ifor循環(huán)的特殊寫法
下面說下文章剛開始說的那個(gè)我沒看懂的代碼,說之前先溫習(xí)下再熟悉不過的for循環(huán)語(yǔ)法。for循環(huán)的基本語(yǔ)法是:
for (語(yǔ)句 1; 語(yǔ)句 2; 語(yǔ)句 3) { 被執(zhí)行的代碼塊 }
語(yǔ)句1:在循環(huán)(代碼塊)開始前執(zhí)行
語(yǔ)句2:定義運(yùn)行循環(huán)(代碼塊)的條件
語(yǔ)句3:在循環(huán)(代碼塊)已被執(zhí)行之后執(zhí)行
如果我們用for循環(huán)要輸出1到10,我們可以這么寫:
for(var i=0;i<10;i++){ console.log(i); }但是!根據(jù)上面的語(yǔ)法說明,我們也可以寫成這樣
for(var i=10;i--;){ console.log(i); }剛開始看的時(shí)候我也很疑惑,怎么能這么寫?語(yǔ)句2放的是循環(huán)條件,i–是什么判斷條件。其實(shí)不然,在語(yǔ)句2中,如果返回true循環(huán)會(huì)繼續(xù)執(zhí)行。在js中0,null,undefined,false,'',””作為條件判斷時(shí),其結(jié)果為false,也就說當(dāng)i–到0的時(shí)候就是false,循環(huán)就終止了。
再回到文章開頭的代碼
for (var i = 0, rule; rule = rules[i++];) { //do something }這個(gè)rule = rules[i++]就是判斷條件,當(dāng)成為undefined時(shí)就會(huì)終止循環(huán)啦。所以這段代碼換成普通寫法就是這樣的:
for(var i = 0;i < rules.length;i++){ var rule = rules[i] }其實(shí)就是把判斷和賦值放到一起了,一邊循環(huán)一邊賦值。是不是挺簡(jiǎn)單?
感謝各位的閱讀!關(guān)于“JavaScript中for循環(huán)怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章題目:JavaScript中for循環(huán)怎么用-創(chuàng)新互聯(lián)
鏈接地址:http://weahome.cn/article/jdiss.html