JavaScript奇技淫巧之遍歷陣列

2021-07-11 02:20:06 字數 2315 閱讀 8242

正常的for迴圈就不提了,直接進入正題。如下:

1

2

3

4

5

6

7

8

9

//示例1

for(vari=0,a;a=["jack","tom","lily","andy"][i++];)

//示例2

varary = ["jack","tom","lily","andy"];

for(vari=0,a;a=ary[i++];)

從firebug控制台能看到依次輸出jack ,tom ,lily ,andy。這裡有個問題,示例1不知是否會每次都產生乙個陣列物件例項,如果是,陣列很大時可能會有效能問題。

這個技巧關鍵是這句

a = ary[i++];

js中陣列實際上也是乙個普通的object。屬於索引陣列且並非「連續分配」記憶體的,因此索引方法並不會帶來很高的效率。

見 索引陣列、關聯陣列和靜態陣列、動態陣列

中括號[i++]依然是乙個普通物件取屬性操作而已,試試看

1

2

3

4

varary = ["jack","tom","lily","andy"];

for(varainary)

firebug控制台輸出0,1,2,3。證明了0,1,2,3的確是陣列ary的屬性。

既然是ary的屬性,那麼是否可以通過點運算子(.)來訪問呢?試試看

1

2

3

for(varj=0;jconsole.log(ary.j);//undefined

}

為什麼示例1,2中用中括號訪問就可以了呢?因為中括號ary[0],ary[1],ary[2],ary[3]裡的0,1,2,3是字串型別的。如下:

1

2

3

for(varatrinary)

輸出如下:

0:string 

1:string 

2:string 

3:string

鮮為人知的是用中括號訪問時,js引擎內部隱式的將數字轉成了字串。 而作為訪問時屬性可以不遵循js識別符號規則(純數字不能作為變數命名)。如

1

2

3

varobj = {};

obj.11 = 11;// 非法

obj['11'] = 11;// 合法

警示:這個for迴圈的缺陷是當陣列元素是null,undefined,0,false等時會造成迴圈終止。要很清楚了解陣列內存放的元素,否則會埋下bug的伏筆

C 之奇技淫巧

typedef struct data 0 pdata 0 typedef struct data 1 pdata 1 結構體data 0與data 1在性質上沒有什麼不同,它們的size是相等的,都是8.但在用法上有很大區別。例 pdata 0 stack0 pdata 0 malloc max ...

git 奇技淫巧

例如 1.0.0 git tag a 1.0.0 m 1.0.0 版本的備註資訊.複製 git push origin tags 複製 例如 1.0.0 git tag d 1.0.0 複製 刪除遠端標籤需要先刪除本地標籤,再執行下面的命令 git push origin refs tags 1.0...

奇技淫巧訓練之五

這道題真的很好,寫題解的人寫的也真好 如果要保留 a i a i 和 a j a j 前提是 他們中間的數本身就合法,或者他們中間的數可以被改成合法。比如,17,50,50,50,19這個序列,看上去17和19能保留,但如果保留,中間三個50怎麼改都不會單調上公升。可見只有 a j a j 和 a ...