JavaScript的Array可以包含任意數(shù)據(jù)類型,并通過索引來訪問每個元素。
要取得Array的長度,直接訪問length屬性:
var arr = [1, 2, 3.14, 'Hello', null, true];arr.length; // 6
請注意,直接給Array的length賦一個新的值會導(dǎo)致Array大小的變化:
var arr = [1, 2, 3];arr.length; // 3arr.length = 6;arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, undefined]arr.length = 2;arr; // arr變?yōu)閇1, 2]Array可以通過索引把對應(yīng)的元素修改為新的值,因此,對Array的索引進(jìn)行賦值會直接修改這個Array:var arr = ['A', 'B', 'C'];arr[1] = 99;arr; // arr現(xiàn)在變?yōu)閇'A', 99, 'C']
請注意,如果通過索引賦值時,索引超過了范圍,同樣會引起Array大小的變化:
var arr = [1, 2, 3];arr[5] = 'x';arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, 'x']
大多數(shù)其他編程語言不允許直接改變數(shù)組的大小,越界訪問索引會報錯。然而,JavaScript的Array卻不會有任何錯誤。在編寫代碼時,不建議直接修改Array的大小,訪問索引時要確保索引不會越界。
indexOf
與String類似,Array也可以通過indexOf()來搜索一個指定的元素的位置:
var arr = [10, 20, '30', 'xyz'];arr.indexOf(10); // 元素10的索引為0arr.indexOf(20); // 元素20的索引為1arr.indexOf(30); // 元素30沒有找到,返回-1arr.indexOf('30'); // 元素'30'的索引為2注意了,數(shù)字30和字符串'30'是不同的元素。
slice
slice()就是對應(yīng)String的substring()版本,它截取Array的部分元素,然后返回一個新的Array:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];arr.slice(0, 3); // 從索引0開始,到索引3結(jié)束,但不包括索引3: ['A', 'B', 'C']arr.slice(3); // 從索引3開始到結(jié)束: ['D', 'E', 'F', 'G']
注意到slice()的起止參數(shù)包括開始索引,不包括結(jié)束索引。
如果不給slice()傳遞任何參數(shù),它就會從頭到尾截取所有元素。利用這一點(diǎn),我們可以很容易地復(fù)制一個Array:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];var aCopy = arr.slice();aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']aCopy === arr; // false
push和pop
push()向Array的末尾添加若干元素,pop()則把Array的最后一個元素刪除掉:
var arr = [1, 2];arr.push('A', 'B'); // 返回Array新的長度: 4arr; // [1, 2, 'A', 'B']arr.pop(); // pop()返回'B'arr; // [1, 2, 'A']arr.pop(); arr.pop(); arr.pop(); // 連續(xù)pop 3次arr; // []arr.pop(); // 空數(shù)組繼續(xù)pop不會報錯,而是返回undefinedarr; // []unshift和shift
如果要往Array的頭部添加若干元素,使用unshift()方法,shift()方法則把Array的第一個元素刪掉:
新聞熱點(diǎn)
疑難解答
圖片精選