array是js原生對(duì)象馏予,同時(shí)也是一個(gè)構(gòu)造函數(shù)复斥,可以用他生成新的數(shù)組霉旗,(一般不要用召川,參數(shù)不同結(jié)果有差異)
var arr=new Array(2);
arr.length // 2
arr // [ empty x 2 ]
靜態(tài)方法 Array.isArray();
Array.isArray();方法返回一個(gè)布爾值南缓,表示參數(shù)是否是數(shù)組,它可以彌補(bǔ)typeof運(yùn)算符的不足荧呐。
實(shí)例方法
valueOf();toString();
valueOf方法是一個(gè)所有對(duì)象都擁有的方法汉形,表示該對(duì)象求值。不同對(duì)象的valueOf方法不盡一致倍阐,數(shù)組的valueOf方法返回?cái)?shù)組本身
var arr=[1,2,3];
arr.valueOf();//[1,2,3]
toString方法也是對(duì)象的通用方法概疆,數(shù)組的toString方法返回?cái)?shù)組的字符串形式。
var arr=[1,2,3];
arr.toString();//"1,2,3"
var arr=[1,2,3,[4,5,6]];
arr.toString();//"1,2,3,4,5,6"
push();pop();
push方法用于在數(shù)組的末端添加一個(gè)或多個(gè)元素峰搪,并返回添加新元素后的數(shù)組長(zhǎng)度岔冀,注意,該方法會(huì)改變?cè)瓟?shù)組
var arr=[];
arr.push(1);//1
arr.push('a');//2
arr.push(true,{})//4
arr //[1,'a',true,{}]
pop方法用于刪除數(shù)組的最后一個(gè)元素,并返回該元素概耻,改變?cè)亟M
var arr=['a','b','c'];
arr.pop();//'c'
arr //['a','b']
對(duì)空數(shù)組使用pop方法使套,不報(bào)錯(cuò),undefined
后進(jìn)先出
shift(),unshift()
shift()方法用于刪除數(shù)組的第一個(gè)元素鞠柄,并返回該元素侦高。注意,該方法會(huì)改變?cè)瓟?shù)組厌杜。
var a = ['a', 'b', 'c'];
a.shift() // 'a'
a // ['b', 'c']
shift()方法可以遍歷并清空一個(gè)數(shù)組奉呛。
var list = [1, 2, 3, 4];
var item;
while (item = list.shift()) {
console.log(item);
}
list // [] 并不可靠,判斷0的問(wèn)題
push()和shift()結(jié)合使用,就構(gòu)成了“先進(jìn)先出”的隊(duì)列結(jié)構(gòu)(queue)瞧壮。
unshift()方法用于在數(shù)組的第一個(gè)位置添加元素危尿,并返回添加新元素后的數(shù)組長(zhǎng)度。注意馁痴,該方法會(huì)改變?cè)瓟?shù)組。
var a = ['a', 'b', 'c'];
a.unshift('x'); // 4
a // ['x', 'a', 'b', 'c']
unshift()方法可以接受多個(gè)參數(shù)肺孤,這些參數(shù)都會(huì)添加到目標(biāo)數(shù)組頭部罗晕。
var arr = [ 'c', 'd' ];
arr.unshift('a', 'b') // 4
arr // [ 'a', 'b', 'c', 'd' ]
join()
join()方法以指定參數(shù)作為分隔符,將所有數(shù)組成員連接為一個(gè)字符串返回赠堵。如果不提供參數(shù)小渊,默認(rèn)用逗號(hào)分隔。
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
如果數(shù)組成員是undefined或null或空位茫叭,會(huì)被轉(zhuǎn)成空字符串酬屉。
[undefined, null].join('#')
// '#'
['a',, 'b'].join('-')
// 'a--b'
通過(guò)call方法,這個(gè)方法也可以用于字符串或類似數(shù)組的對(duì)象揍愁。
Array.prototype.join.call('hello', '-')
// "h-e-l-l-o"
var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-')
// 'a-b'
concat()
concat方法用于多個(gè)數(shù)組的合并呐萨。它將新數(shù)組的成員,添加到原數(shù)組成員的后部莽囤,然后返回一個(gè)新數(shù)組谬擦,原數(shù)組不變。
['hello'].concat(['world'])
// ["hello", "world"]
['hello'].concat(['world'], ['!'])
// ["hello", "world", "!"]
[].concat({a: 1}, {b: 2})
// [{ a: 1 }, { b: 2 }]
[2].concat({a: 1})
// [2, {a: 1}]
除了數(shù)組作為參數(shù)朽缎,concat也接受其他類型的值作為參數(shù)惨远,添加到目標(biāo)數(shù)組尾部。
[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
如果數(shù)組成員包括對(duì)象话肖,concat方法返回當(dāng)前數(shù)組的一個(gè)淺拷貝北秽。所謂“淺拷貝”,指的是新數(shù)組拷貝的是對(duì)象的引用最筒。
var obj = { a: 1 };
var oldArray = [obj];
var newArray = oldArray.concat();
obj.a = 2;
newArray[0].a // 2
reverse()
reverse方法用于顛倒排列數(shù)組元素贺氓,返回改變后的數(shù)組。注意床蜘,該方法將改變?cè)瓟?shù)組掠归。
var a = ['a', 'b', 'c'];
a.reverse() // ["c", "b", "a"]
a // ["c", "b", "a"]
slice()
slice方法用于提取目標(biāo)數(shù)組的一部分,返回一個(gè)新數(shù)組悄泥,原數(shù)組不變虏冻。
arr.slice(start, end);
slice方法的一個(gè)重要應(yīng)用,是將類似數(shù)組的對(duì)象轉(zhuǎn)為真正的數(shù)組弹囚。
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']
Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
splice()
splice方法用于刪除原數(shù)組的一部分成員厨相,并可以在刪除的位置添加新的數(shù)組成員,返回值是被刪除的元素。注意蛮穿,該方法會(huì)改變?cè)瓟?shù)組庶骄。
arr.splice(start, count, addElement1, addElement2, ...);
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]
如果只是單純地插入元素,splice方法的第二個(gè)參數(shù)可以設(shè)為0践磅。
var a = [1, 1, 1];
a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
如果只提供第一個(gè)參數(shù)单刁,等同于將原數(shù)組在指定位置拆分成兩個(gè)數(shù)組。
var a = [1, 2, 3, 4];
a.splice(2) // [3, 4]
a // [1, 2]
sort()
sort方法對(duì)數(shù)組成員進(jìn)行排序府适,默認(rèn)是按照字典順序排序羔飞。排序后,原數(shù)組將被改變檐春。
['d', 'c', 'b', 'a'].sort()
// ['a', 'b', 'c', 'd']
[4, 3, 2, 1].sort()
// [1, 2, 3, 4]
[11, 101].sort()
// [101, 11]
[10111, 1101, 111].sort()
// [10111, 1101, 111]
如果想讓sort方法按照自定義方式排序逻淌,可以傳入一個(gè)函數(shù)作為參數(shù)。
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
map()
map方法將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)疟暖,然后把每一次的執(zhí)行結(jié)果組成一個(gè)新數(shù)組返回卡儒。
var numbers = [1, 2, 3];
numbers.map(function (n) {
return n + 1;
});
// [2, 3, 4]
numbers
// [1, 2, 3]
map方法接受一個(gè)函數(shù)作為參數(shù)。該函數(shù)調(diào)用時(shí)俐巴,map方法向它傳入三個(gè)參數(shù):當(dāng)前成員骨望、當(dāng)前位置和數(shù)組本身。
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
map方法還可以接受第二個(gè)參數(shù)欣舵,用來(lái)綁定回調(diào)函數(shù)內(nèi)部的this變量(詳見(jiàn)《this 變量》一章)锦募。
var arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']