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, как если бы мы имели дело с настоящим массивом.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 - Руководство по индексированным коллекциям
ArrayArray.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