Array.prototype.pop()
Метод pop()
(висунути) примірників Array
прибирає останній елемент з масиву – і повертає цей елемент. Цей метод змінює довжину масиву.
Спробуйте його в дії
Синтаксис
pop()
Параметри
Жодних.
Повернене значення
Усунутий з масиву елемент; undefined
, якщо масив порожній.
Опис
Метод pop()
прибирає з масиву останній елемент – і повертає значення цього елемента в місце виклику. Якщо викликати pop()
на порожньому масиві, він поверне undefined
.
Array.prototype.shift()
має подібну до pop()
логіку, але застосовується до першого елемента масиву.
Метод pop()
є змінювальним методом. Він змінює довжину та вміст this
. Якщо треба, аби значення this
було тим самим, але повертався новий масив без останнього елемента, можна натомість використати arr.slice(0, -1)
.
Метод pop()
є узагальненим. Він лишень очікує, що значення this
матиме властивість length
, а також цілочислові властивості. Попри те, що рядки також є масивоподібними значеннями, цей метод не підходить для застосування до них, адже рядки є незмінними.
Приклади
Усунення останнього елемента масиву
Наступний код створює масив myFish
, що містить чотири елементи, а потім прибирає його останній елемент.
const myFish = ["янгол", "клоун", "мандаринка", "осетер"];
const popped = myFish.pop();
console.log(myFish); // ['янгол', 'клоун', 'мандаринка' ]
console.log(popped); // 'осетер'
Виклик pop() на об'єктах-немасивах
Метод pop()
зчитує з this
властивість length
. Якщо нормалізована довжина – 0, то length
наново присвоюється 0
(хоч до цього в цій властивості могло бути від'ємне значення або undefined
). Інакше – повертається та видаляється значення властивості length - 1
.
const arrayLike = {
length: 3,
unrelated: "foo",
2: 4,
};
console.log(Array.prototype.pop.call(arrayLike));
// 4
console.log(arrayLike);
// { length: 2, unrelated: 'foo' }
const plainObj = {};
// Властивості length немає, отже, довжина – 0
Array.prototype.pop.call(plainObj);
console.log(plainObj);
// { length: 0 }
Використання об'єкта в масивоподібний спосіб
push
і pop
свідомо зроблені узагальненими, і це можна використовувати для отримання переваг – як це демонструє наступний приклад.
Зверніть увагу, що в цьому прикладі не створюється масив для зберігання колекції об'єктів. натомість колекція зберігається на самому об'єкті, і на Array.prototype.push
і Array.prototype.pop
використовується call
, аби обманути ці методи, ніби вони обробляють масив.
const collection = {
length: 0,
addElements(...elements) {
// obj.length буде збільшено на одиницю автоматично
// щоразу, коли додається елемент.
// Повернення того, що повертає push;
// тобто нового значення властивості length
return [].push.call(this, ...elements);
},
removeElement() {
// obj.length буде зменшено на одиницю автоматично
// щоразу, коли прибирається елемент.
// Повернення того, що повертає pop;
// тобто прибраного елемента
return [].pop.call(this);
},
};
collection.addElements(10, 20, 30);
console.log(collection.length); // 3
collection.removeElement();
console.log(collection.length); // 2
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pop
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5.5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |