亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript中for循環語句有哪些寫法

發布時間:2021-08-11 14:19:05 來源:億速云 閱讀:139 作者:小新 欄目:web開發

這篇文章主要介紹了Javascript中for循環語句有哪些寫法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一般寫法如下:

for(var i = 0;i< arr.length;i++) {
 var a = arr[i];
 //...
 }

這就是一個常見的,正序循環的for循環。這樣寫的缺點大家都明白:每次都從arr里取length與i來對比,浪費性能(而且,要是arr的長度是動態變化的,就會出現死循環)。改進這個循環的辦法是用變量保存arr.length

for(var i = 0, al = arr.length;i< al;i++) {
 var a = arr[i];
 //...
 }

這樣比第一種可以略微提升點性能,要是數組長,可以提升更多。

不過這樣寫就多了個變量al,且這個變量只在用來與i對比的時候有用,看著有點雞肋。

如果循環順序對你不重要,那你可以嘗試倒序循環:

for(var i = arr.length-1;i > -1;i--) {
 var a = arr[i];
 //...
 }

這樣一來變量少些,且還緩存過arr長度,性能也不錯。但這里的代碼寫得有點拙劣(我故意的),首先是i = arr.length-1(居然要-1,靠),然后是循環繼續執行的條件i > -1,都讓有潔癖的人無法忍受。

下面是我常用的倒序for循環寫法:

for(var i = arr.length;i--;) {
 var a = arr[i];
 //...
 }

這已經非常精簡了。原理需要理解一下:for循環繼續執行的條件,是;;之間的這個判斷要為真,而這里的i–,在第一次循環進來的時候,i=arr.length,i–值不變(為什么不變?因為要在for循環體里面,才會發現i變了);當i=1時,i- -還是1,但進入循環體后,就是0了,所以可以正常執行最后一次循環;當i=0時,i–還是0,而0已經不為真了,所以循環就不會繼續執行了。

大家注意到上面的所有代碼的for循環體里,都有個var a = arr[i] ,用來取出當前循環到的數組項。這實際上也是種浪費,且jsLint等會告訴你:不要在循環里聲明變量。。。

倒序的for可以精簡至斯,但我就是要正序,而且要效率高,變量少,怎么辦?

如下:

for(var i = 0, a;a = arr[i++];) {
 //...
 }

這種寫法好處在于:幾乎不可避免的arr.length不見了,前面說的取出當前循環到的數組項的那一句也不見了。

原理:

a = arr[i++] ,在這里作為循環能執行的條件,注意這里只有一個=號,所以這不是判斷句,是賦值語句,就是把arr[i++]賦給a,然后判斷a是不是真值。i++與i–的原理類型我就不說了,只說當i++已經超過數組的長度時,循環肯定要停止才行,而這里真的就停止了,為什么?因為a=arr[i++] ,如果取到了超出數組本身長度的項,只會取得一個undefined,而undefined是假值,循環條件就判斷失敗了。

當然,這樣寫的缺點也很明顯:

     1,當arr的長度動態變化時,依然會產生死循環————因為我們從來沒緩存過arr.length呀。

     2,如果循環的是一個數字數組,當取出的項(即a的值)為0時,就會中止循環(因為0是假值)。

     3,當數組中某一項是假值時(包括空字符串,0,null,undefined),同樣會中止循環

所以大家用這種寫法時,最好排除掉上面的情況再用。

這個原理同樣可以用在倒序循環上。

最后我要忠告大家幾句:

  1. 代碼精簡不等于效率高!

  2. 不要為了故意精簡代碼而喪失性能

順帶說幾點提高for循環性能的要點:

     1,適時break!不需要遍歷全部的就要加跳出條件!

     2,不要在for循環體里聲明變量(建議一次var,多次賦值)

     2,數組長度緩存,盡量少變量

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Javascript中for循環語句有哪些寫法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东| 重庆市| 克东县| 海城市| 凯里市| 竹山县| 上犹县| 寻乌县| 车险| 平潭县| 陆川县| 富裕县| 安仁县| 隆化县| 潜江市| 建水县| 宁蒗| 延津县| 德钦县| 邯郸县| 舟山市| 光山县| 茌平县| 聊城市| 顺昌县| 沭阳县| 洪泽县| 泰州市| 泸西县| 石门县| 武清区| 玉林市| 苏州市| 黎平县| 杨浦区| 翁牛特旗| 清水河县| 忻州市| 都江堰市| 镇坪县| 锡林浩特市|