這篇文章主要介紹了Javascript中for循環(huán)語句有哪些寫法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十余年時間我們累計服務了上千家以及全國政企客戶,如咖啡廳設計等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質量監(jiān)控加上過硬的技術實力獲得客戶的一致稱譽。一般寫法如下:
for(var i = 0;i< arr.length;i++) { var a = arr[i]; //... }
這就是一個常見的,正序循環(huán)的for循環(huán)。這樣寫的缺點大家都明白:每次都從arr里取length與i來對比,浪費性能(而且,要是arr的長度是動態(tài)變化的,就會出現死循環(huán))。改進這個循環(huán)的辦法是用變量保存arr.length
:
for(var i = 0, al = arr.length;i< al;i++) { var a = arr[i]; //... }
這樣比第一種可以略微提升點性能,要是數組長,可以提升更多。
不過這樣寫就多了個變量al,且這個變量只在用來與i對比的時候有用,看著有點雞肋。
如果循環(huán)順序對你不重要,那你可以嘗試倒序循環(huán):
for(var i = arr.length-1;i > -1;i--) { var a = arr[i]; //... }
這樣一來變量少些,且還緩存過arr長度,性能也不錯。但這里的代碼寫得有點拙劣(我故意的),首先是i = arr.length-1
(居然要-1,靠),然后是循環(huán)繼續(xù)執(zhí)行的條件i > -1,都讓有潔癖的人無法忍受。
下面是我常用的倒序for循環(huán)寫法:
for(var i = arr.length;i--;) { var a = arr[i]; //... }
這已經非常精簡了。原理需要理解一下:for循環(huán)繼續(xù)執(zhí)行的條件,是;;之間的這個判斷要為真,而這里的i–,在第一次循環(huán)進來的時候,i=arr.length
,i–值不變(為什么不變?因為要在for循環(huán)體里面,才會發(fā)現i變了);當i=1時,i- -還是1,但進入循環(huán)體后,就是0了,所以可以正常執(zhí)行最后一次循環(huán);當i=0時,i–還是0,而0已經不為真了,所以循環(huán)就不會繼續(xù)執(zhí)行了。
大家注意到上面的所有代碼的for循環(huán)體里,都有個var a = arr[i]
,用來取出當前循環(huán)到的數組項。這實際上也是種浪費,且jsLint等會告訴你:不要在循環(huán)里聲明變量。。。
倒序的for可以精簡至斯,但我就是要正序,而且要效率高,變量少,怎么辦?
如下:
for(var i = 0, a;a = arr[i++];) { //... }
這種寫法好處在于:幾乎不可避免的arr.length
不見了,前面說的取出當前循環(huán)到的數組項的那一句也不見了。
原理:
a = arr[i++]
,在這里作為循環(huán)能執(zhí)行的條件,注意這里只有一個=號,所以這不是判斷句,是賦值語句,就是把arr[i++]
賦給a,然后判斷a是不是真值。i++與i–的原理類型我就不說了,只說當i++已經超過數組的長度時,循環(huán)肯定要停止才行,而這里真的就停止了,為什么?因為a=arr[i++]
,如果取到了超出數組本身長度的項,只會取得一個undefined,而undefined是假值,循環(huán)條件就判斷失敗了。
當然,這樣寫的缺點也很明顯:
1,當arr的長度動態(tài)變化時,依然會產生死循環(huán)————因為我們從來沒緩存過arr.length呀。
2,如果循環(huán)的是一個數字數組,當取出的項(即a的值)為0時,就會中止循環(huán)(因為0是假值)。
3,當數組中某一項是假值時(包括空字符串,0,null,undefined),同樣會中止循環(huán)
所以大家用這種寫法時,最好排除掉上面的情況再用。
這個原理同樣可以用在倒序循環(huán)上。
最后我要忠告大家?guī)拙洌?/strong>
代碼精簡不等于效率高!
不要為了故意精簡代碼而喪失性能
順帶說幾點提高for循環(huán)性能的要點:
1,適時break!不需要遍歷全部的就要加跳出條件!
2,不要在for循環(huán)體里聲明變量(建議一次var,多次賦值)
2,數組長度緩存,盡量少變量
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Javascript中for循環(huán)語句有哪些寫法”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯建站,關注創(chuàng)新互聯網站建設公司行業(yè)資訊頻道,更多相關知識等著你來學習!
另外有需要云服務器可以了解下創(chuàng)新互聯建站jinyejixie.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:Javascript中for循環(huán)語句有哪些寫法-創(chuàng)新互聯
網址分享:http://jinyejixie.com/article16/egpgg.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站排名、搜索引擎優(yōu)化、品牌網站制作、小程序開發(fā)、虛擬主機、網頁設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯