array.push

array.push

push() 方法将一个或多个元素添加到数组的末尾,并返回新数组的长度。

var numbers = [1, 2, 3]; numbers.push(4 console.log(numbers // [1, 2, 3, 4] numbers.push(5, 6, 7 console.log(numbers // [1, 2, 3, 4, 5, 6, 7]

语法

arr.push([element1[, ...[, elementN]]])

参数

element_N_被添加到数组末尾的元素。

返回值

当调用该方法时,新的length属性值将被返回。

描述

push方法将值追加到数组中。

push 方法有意具有通用性。该方法和call()apply()一起使用时,可应用在类似数组的对象上。

唯一的原生类数组(array-like)对象是Strings,尽管如此,它们并不适用该方法,因为字符串是不可改变的。

示例

添加元素到数组

下面的代码创建了 sports 数组,包含两个元素,然后又把两个元素添加给它。total 变量为数组的新长度值。

var sports = ['soccer', 'baseball']; var total = sports.push('football', 'swimming' console.log(sports // ['soccer', 'baseball', 'football', 'swimming'] console.log(total // 4

合并两个数组

该示例使用apply()添加第二个数组的所有元素。

注意当第二个数组(如示例中的moreVegs)太大时不要使用这个方法来合并数组,因为事实上一个函数能够接受的参数个数是有限制的。具体可以参考apply() 。

var vegetables = ['parsnip', 'potato']; var moreVegs = ['celery', 'beetroot']; // Merge the second array into the first one // Equivalent to vegetables.push('celery', 'beetroot' Array.prototype.push.apply(vegetables, moreVegs console.log(vegetables // ['parsnip', 'potato', 'celery', 'beetroot']

像数组一样使用对象

如上所述,push 是特意设计为通用的,我们可以使用它来获得便利。正如下面的例子所示,Array.prototype.push 可以在一个对象上工作。 注意,我们没有创建一个数组来存储对象的集合。 相反,我们将该集合存储在对象本身上,并使用在 Array.prototype.push 上使用的call来调用该方法,使其认为我们正在处理数组,而它只是像平常一样运作,这要感谢 JavaScript 允许我们建立任意的执行上下文。

var obj = { length: 0, addElem: function addElem(elem) { // obj.length is automatically incremented // every time an element is added. [].push.call(this, elem } }; // Let's add some empty objects just to illustrate. obj.addElem{} obj.addElem{} console.log(obj.length // → 2

注意,尽管 obj 不是数组,但是 push 方法成功地使 obj length 属性增长了,就像我们处理一个实际的数组一样。

规范

SpecificationStatusComment
ECMAScript 3rd Edition (ECMA-262)StandardInitial definition. Implemented in JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)The definition of 'Array.prototype.push' in that specification.Standard
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Array.prototype.push' in that specification.Standard
ECMAScript Latest Draft (ECMA-262)The definition of 'Array.prototype.push' in that specification.Living Standard

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support1(Yes)15.5(Yes)(Yes)

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)1(Yes)(Yes)(Yes)