Spec-Zone.ru › JavaScript

Array.prototype.push()

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

Метод push() экземпляров Array добавляет указанные элементы в конец массива и возвращает новую длину массива.

Попробуйте

const animals = ["pigs", "goats", "sheep"];

const count = animals.push("cows");
console.log(count);
// Expected output: 4
console.log(animals);
// Expected output: Array ["pigs", "goats", "sheep", "cows"]

animals.push("chickens", "cats", "dogs");
console.log(animals);
// Expected output: Array ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]

Синтаксис

push()
push(element1)
push(element1, element2)
push(element1, element2, /* …, */ elementN)

Параметры

element1, …, elementN
Элемент(ы) для добавления в конец массива.

Возвращаемое значение

Новое свойство length объекта, у которого был вызван метод.

Описание

Метод push() добавляет значения в конец массива.

Array.prototype.unshift() имеет похожее поведение с push(), но применяется к началу массива.

Метод push() является изменяющим методом. Он изменяет длину и содержимое this. Если вы хотите, чтобы значение this было таким же, но вернуть новый массив с добавленными элементами, вместо этого вы можете использовать arr.concat([element0, element1, /* ... ,*/ elementN]). Обратите внимание, что элементы обернуты в дополнительный массив — в противном случае, если элемент сам является массивом, он будет распакован, а не добавлен как один элемент, из-за поведения concat().

Метод push() является общим. Он ожидает, что значение this будет иметь свойство length и свойства с целочисленными ключами. Хотя строки также похожи на массивы, этот метод не подходит для их применения, так как строки неизменяемы.

Примеры

Добавление элементов в массив

Следующий код создает массив sports, содержащий два элемента, затем добавляет к нему два элемента. Переменная total содержит новую длину массива.

const sports = ["soccer", "baseball"];
const total = sports.push("football", "swimming");

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

Объединение двух массивов

Этот пример использует синтаксис расширения для добавления всех элементов из второго массива в первый.

const vegetables = ["parsnip", "potato"];
const moreVegs = ["celery", "beetroot"];

// Merge the second array into the first one
vegetables.push(...moreVegs);

console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot']

Объединение двух массивов также можно выполнить с помощью метода concat(), который создаст новый объединенный массив вместо добавления к исходному. Синтаксис расширения работает только в том случае, если количество элементов в массиве меньше максимально допустимого количества аргументов функции, разрешенного движком. Для более длинных массивов используйте concat() или вызывайте push() несколько раз в цикле.

Вызов push() для объектов, не являющихся массивами

Метод push() считывает свойство length из this. Затем он устанавливает каждый индекс this, начиная с length, с аргументами, переданными в push(). Наконец, он устанавливает length равным предыдущей длине плюс количество добавленных элементов.

const arrayLike = {
  length: 3,
  unrelated: "foo",
  2: 4,
};
Array.prototype.push.call(arrayLike, 1, 2);
console.log(arrayLike);
// { '2': 4, '3': 1, '4': 2, length: 5, unrelated: 'foo' }

const plainObj = {};
// There's no length property, so the length is 0
Array.prototype.push.call(plainObj, 1, 2);
console.log(plainObj);
// { '0': 1, '1': 2, length: 2 }

Использование объекта в виде, похожем на массив

Как упоминалось выше, push намеренно является общим, и мы можем использовать это в своих интересах. Array.prototype.push может работать с объектом без проблем, как показано в этом примере.

Обратите внимание, что мы не создаем массив для хранения коллекции объектов. Вместо этого мы храним коллекцию в самом объекте и используем call на Array.prototype.push, чтобы обмануть метод, заставив его думать, что мы имеем дело с массивом — и это работает, благодаря тому, как JavaScript позволяет нам устанавливать контекст выполнения в любом желаемом виде.

const obj = {
  length: 0,

  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 успешно увеличил свойство length объекта obj, как если бы мы имели дело с настоящим массивом.

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.push

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
push
1
12
1
4
1
18
4
10.1
1
1.0
1
1
1.0.0
1.0
0.10.0

См. также

  • Polyfill Array.prototype.push в core-js с исправлениями этого метода
  • es-shims polyfill Array.prototype.push
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.pop()
  • Array.prototype.shift()
  • Array.prototype.unshift()
  • Array.prototype.concat()
  • Array.prototype.splice()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API