Array.prototype.concat()
concat
方法將建立一個新的數組,而後將調用它的對象(this
指向的對象)中的元素以及全部參數中的數組類型的參數中的元素以及非數組類型的參數自己按照順序放入這個新數組,並返回該數組。concat
方法並不修改調用它的對象(this
指向的對象)和參數中的各個數組自己的值,而是將他們的每一個元素拷貝一份放在組合成的新數組中。原數組中的元素有兩種被拷貝的方式:javascript
對象引用(非對象直接量):concat
方法會複製對象引用放到組合的新數組裏,原數組和新數組中的對象引用都指向同一個實際的對象,因此,當實際的對象被修改時,兩個數組也同時會被修改,如:原數組和新數組裏都有一個對象obj
,若是改變其屬性,則原數組與新數組裏的obj
屬性都發生變化。java
字符串和數字(是原始值,而不是包裝原始值的String
和Number
對象):concat
方法會複製字符串和數字的值放到新數組裏。數組
var alpha = ["a", "b", "c"]; var numeric = [1, 2, 3]; // 組成新數組 ["a", "b", "c", 1, 2, 3]; 原數組 alpha 和 numeric 未被修改 var alphaNumeric = alpha.concat(numeric);
var num1 = [1, 2, 3]; var num2 = [4, 5, 6]; var num3 = [7, 8, 9]; // 組成新數組[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原數組 num1, num2, num3 未被修改 var nums = num1.concat(num2, num3);
var alpha = ['a', 'b', 'c']; // 組成新數組 ["a", "b", "c", 1, 2, 3], 原alpha數組未被修改 var alphaNumeric = alpha.concat(1, [2, 3]);
Array.prototype.push()
push()
方法添加一個或多個元素到數組的末尾,並返回數組新的長度(length
屬性值)。app
arr.push(element1, ..., elementN)
this
var sports = ["soccer", "baseball"]; var total = sports.push("football", "swimming"); console.log(sports); // ["soccer", "baseball", "football", "swimming"] console.log(total); // 4
錯誤方法prototype
var sports1 = ['soccer', 'baseball']; var sports2 = ['football', 'swimming']; var total = sports1.push(sports2); /* or */ var total = Array.prototype.push.call(sports1, sports2); console.log(sports1); // ['soccter', 'baseball', ['football', 'swimming']]
應該用apply
方法,將被push
的數組當成參數數組。code
var sports1 = ['soccer', 'baseball']; var sports2 = ['football', 'swimming']; var total = Array.prototype.push.apply(sports1, sports2); console.log(sports1); // ['soccter', 'baseball', 'football', 'swimming']
Array.prototype.concat()
返回一個新數組,不會改變原數組,可是會佔用較多內存。對象
Array.prototype.push()
會改變this
數組,返回最新length
屬性,佔用內存較少。ip
參考:內存