1.定義
數(shù)組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始)郎笆,整個數(shù)組用方括號表示。
var arr = ['a', 'b', 'c'];
上面代碼中的a忘晤、b宛蚓、c就構(gòu)成一個數(shù)組,兩端的方括號是數(shù)組的標(biāo)志设塔。a是0號位置凄吏,b是1號位置,c是2號位置。除了在定義時賦值痕钢,數(shù)組也可以先定義后賦值图柏。
var arr = [];
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
任何類型的數(shù)據(jù),都可以放入數(shù)組任连。
var arr = [
{a: 1},
[1, 2, 3],
function() {return true;}
];
arr[0] // Object {a: 1}
arr[1] // [1, 2, 3]
arr[2] // function (){return true;}
上面數(shù)組arr的3個成員依次是對象蚤吹、數(shù)組、函數(shù)课梳。如果數(shù)組的元素還是數(shù)組距辆,就形成了多維數(shù)組。
var a = [[1, 2], [3, 4]];
a[0][1] // 2
a[1][1] // 4
2.數(shù)組的本質(zhì)
本質(zhì)上暮刃,數(shù)組屬于一種特殊的對象。typeof運(yùn)算符會返回數(shù)組的類型是object爆土。
typeof [1, 2, 3] // "object"
上面代碼表明椭懊,typeof運(yùn)算符認(rèn)為數(shù)組的類型就是對象。數(shù)組的特殊性體現(xiàn)在步势,它的鍵名是按次序排列的一組整數(shù)(0氧猬,1,2...)坏瘩。
var arr = ['a', 'b', 'c'];
Object.keys(arr)
// ["0", "1", "2"]
上面代碼中盅抚,Object.keys方法返回數(shù)組的所有鍵名【蠓可以看到數(shù)組的鍵名就是整數(shù)0妄均、1、2哪自。由于數(shù)組成員的鍵名是固定的(默認(rèn)總是0丰包、1、2...)壤巷,因此數(shù)組不用為每個元素指定鍵名邑彪,而對象的每個成員都必須指定鍵名。JavaScript 語言規(guī)定胧华,對象的鍵名一律為字符串寄症,所以,數(shù)組的鍵名其實(shí)也是字符串矩动。之所以可以用數(shù)值讀取有巧,是因?yàn)榉亲址逆I名會被轉(zhuǎn)為字符串。
var arr = ['a', 'b', 'c'];
arr['0'] // 'a'
arr[0] // 'a'
上面代碼分別用數(shù)值和字符串作為鍵名铅忿,結(jié)果都能讀取數(shù)組剪决。原因是數(shù)值鍵名被自動轉(zhuǎn)為了字符串。注意,這點(diǎn)在賦值時也成立柑潦。如果一個值總是先轉(zhuǎn)成字符串享言,再進(jìn)行賦值。
var a = [];
a[1.00] = 6;
a[1] // 6
那key也可以是其他字符串渗鬼,不一定是數(shù)字览露,如:
不過length就是0,所以一般我們都用數(shù)組默認(rèn)的數(shù)字key譬胎,而不會自己去定義key
3.length 屬性
數(shù)組的length屬性差牛,返回數(shù)組的成員數(shù)量。
['a', 'b', 'c'].length // 3
JavaScript 使用一個32位整數(shù)堰乔,保存數(shù)組的元素個數(shù)偏化。這意味著,數(shù)組成員最多只有 4294967295 個(232 - 1)個镐侯,也就是說length屬性的最大值就是 4294967295侦讨。只要是數(shù)組,就一定有l(wèi)ength屬性苟翻。該屬性是一個動態(tài)的值韵卤,等于鍵名中的最大整數(shù)加上1。
var arr = ['a', 'b'];
arr.length // 2
arr[2] = 'c';
arr.length // 3
arr[9] = 'd';
arr.length // 10
arr[1000] = 'e';
arr.length // 1001
上面代碼表示崇猫,數(shù)組的數(shù)字鍵不需要連續(xù)沈条,length屬性的值總是比最大的那個整數(shù)鍵大1。另外诅炉,這也表明數(shù)組是一種動態(tài)的數(shù)據(jù)結(jié)構(gòu)蜡歹,可以隨時增減數(shù)組的成員。length屬性是可寫的汞扎。如果人為設(shè)置一個小于當(dāng)前成員個數(shù)的值季稳,該數(shù)組的成員會自動減少到length設(shè)置的值。
var arr = [ 'a', 'b', 'c' ];
arr.length // 3
arr.length = 2;
arr // ["a", "b"]
上面代碼表示澈魄,當(dāng)數(shù)組的length屬性設(shè)為2(即最大的整數(shù)鍵只能是1)那么整數(shù)鍵2(值為c)就已經(jīng)不在數(shù)組中了景鼠,被自動刪除了。清空數(shù)組的一個有效方法痹扇,就是將length屬性設(shè)為0铛漓。