--- title: Array slug: Web/JavaScript/Reference/Global_Objects/Array tags: - Array - JavaScript - Масив translation_of: Web/JavaScript/Reference/Global_Objects/Array ---
{{JSRef}}

Array є глобальним об'єктом, що використовується для створення масивів; які є високорівневими, спископодібними об'єктами.

Створення масиву

var fruits = ["Яблуко", "Банан"];

console.log(fruits.length);
// 2

Доступ до елементів масиву (за індексом)

var first = fruits[0];
// Яблуко

var last = fruits[fruits.length - 1];
// Банан

Обхід елементів масиву

fruits.forEach(function (item, index, array) {
  console.log(item, index);
});
// Яблуко 0
// Банан 1

Додавання в кінець масиву

var newLength = fruits.push("Апельсин");
// ["Яблуко", "Банан", "Апельсин"]

Видалення елемента з кінця масиву

var last = fruits.pop(); // видалити Апельсин (з кінця)
// ["Яблуко", "Банан"];

Видалення елемента з початку масиву

var first = fruits.shift(); // видалити Яблуко з початку
// ["Банан"];

Додавання елемента до початку масиву

var newLength = fruits.unshift("Полуниця") // додади до початку
// ["Полуниця", "Банан"];

Пошук індексу елемента в масиві

fruits.push("Манго");
// ["Полуниця", "Банан", "Манго"]

var pos = fruits.indexOf("Банан");
// 1

Видалення елемента масиву за його індексом (позицією)

var removedItem = fruits.splice(pos, 1); // ось, як видаляється елемент
// ["Полуниця", "Манго"]

Видалення елементів починаючи з певного індексу

var vegetables = ['Капуста', 'Ріпа', 'Редька', 'Морква'];
console.log(vegetables);
// ["Капуста", "Ріпа", "Редька", "Морква"]

var pos = 1, n = 2;

var removedItems = vegetables.splice(pos, n);
// ось так видаляються елементи, n визначає кількість елементів на видалення,
// від цієї позиції (pos) в напрямку кінця масиву.

console.log(vegetables);
// ["Капуста", "Морква"] (початковий масив змінено)

console.log(removedItems);
// ["Ріпа", "Редька"]

Копіювання масиву

var shallowCopy = fruits.slice(); // ось так робиться копія
// ["Полуниця", "Манго"]

Синтаксис

[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)

Параметри

elementN

Масив у JavaScript ініціалізується за допомогою наперед заданих елементів, за виключенням тієї ситуації коли в конструктор Array передається тільки один аргумент і він є числом (див. параметр arrayLength нижче). Зверніть увагу на те, що це спрацьовує лише у тому випадку, якщо масив створено за допомогою  конструктора Array, а не через літерали масивів створених з допомогою синтаксу квадратних дужок.
arrayLength
Якщо єдиним аргументом (вхідним параметром) конструктора Array є ціле число від 0 до 232-1 (включно), буде повернено новий JavaScript-масив з властивістю length рівною цьому числу.  Зверніть увагу, що цей масив матиме пусті слоти, а не слоти зі значеннями undefined. Якщо аргументом буде будь-яке інше число, виникне виняток RangeError.

Опис

Масиви - це спископодібні об'єкти, чий прототип має методи для операцій обходу та зміни масиву. Ані довжина масиву, ані типи його елементів не є незмінними. Довжина масиву може змінитись будь-коли, як і позиція даних в масиві; тому їх використання залежить від рішення програміста. Взагалі, це зручні характеристики; але якщо ці особливості не є бажаними для ваших конкретних цілей, ви можете розглянути можливість використання типізованих масивів.

Масиви не можуть використовувати рядки у якості індексів елементів (як асоціативні масиви), а тільки цілі числа(індекси). Присвоєння або звернення через не цілочисельні значення, з використанням квадратних дужок (або через крапку), не присвоїть або не отримає елемент з самого списку масиву, але присвоїть чи отримає доступ до змінної, пов'язаної з колекцією властивостей об'єкта(властивості) цього масиву. Об'єктні властивості масиву та список елементів масиву є відокремленими, і операції обходу та зміни цього масиву не застосовуються до цих іменованих властивостей.

Доступ до елементів масиву

Масиви в JavaScript індексуються з нуля: перший елемент масиву має індекс, який дорівнює 0, а індекс останнього елемента відповідає значенню властивості масиву {{jsxref("Array.length", "length")}} мінус 1. Використання неправильного індексу повертає undefined.

var arr = ['це перший елемент', 'це другий елемент'];
console.log(arr[0]);              // виводить 'це перший елемент'
console.log(arr[1]);              // виводить 'це другий елемент'
console.log(arr[arr.length - 1]); // виводить 'це другий елемент'

Елементи масиву є властивостями об'єкта, так само, як toString є властивістю, але спроби звернутися до елемента масиву наступним чином згенерує синтаксичну помилку через неправильне ім'я властивості:

console.log(arr.0); // є синтаксична помилка

В масивах JavaScript немає нічого особливого, що призводить до цього. До властивостей JavaScript, які починаються з цифри, не можна звертатися через крапку; необхідно звертатися через квадратні дужки. Наприклад, якщо ви маєте об'єкт з властивістю під назвою '3d', до неї можна звертатися тільки через квадратні дужки. Приклад:

var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
console.log(years.0);   // є синтаксична помилка
console.log(years[0]);  // працює вірно
renderer.3d.setTexture(model, 'character.png');     // є синтаксична помилка
renderer['3d'].setTexture(model, 'character.png');  // працює вірно

Зверніть увагу, що '3d' має писатися в лапках. Індекси масивів JavaScript також можна писати в лапках (напр., years['2'] замість years[2]), хоча це не обов'язково. Індекс 2 у years[2] примусово перетворюється на рядок рушієм JavaScript через неявне перетворення toString. Саме через це '2' та '02' займали б два різні слоти в об'єкті years і наступний приклад дорівнював би true:

console.log(years['2'] != years['02']);

Схожим чином до властивостей об'єкта, які є зарезервованими словами (!) можна звертатися тільки через рядкові значення у квадратних дужках (але до них можна звертатися через крапку у firefox 40.0a2 наприклад):

var promise = {
  'var'  : 'text',
  'array': [1, 2, 3, 4]
};

console.log(promise['array']);

Зв'язок між length та числовими властивостями

У масивах JavaScript властивість {{jsxref("Array.length", "length")}} та числові властивості взаємопов'язані. Декілька з вбудованих методів масивів (напр., {{jsxref("Array.join", "join")}}, {{jsxref("Array.slice", "slice")}}, {{jsxref("Array.indexOf", "indexOf")}}, і т.д.) враховують значення властивості {{jsxref("Array.length", "length")}} під час виконання. Інші методи (напр., {{jsxref("Array.push", "push")}}, {{jsxref("Array.splice", "splice")}}, і т.д.) призводять до зміни властивості масиву {{jsxref("Array.length", "length")}}.

var fruits = [];
fruits.push('банан', 'яблуко', 'персик');

console.log(fruits.length); // 3

Присвоєння властивості до масиву JavaScript змінить властивість масиву {{jsxref("Array.length", "length")}} відповідним чином, якщо властивість є коректним індексом масиву, і цей індекс знаходиться поза поточними межами масиву:

fruits[5] = 'манго';
console.log(fruits[5]); // 'манго'
console.log(Object.keys(fruits));  // ['0', '1', '2', '5']
console.log(fruits.length); // 6

Збільшення значення {{jsxref("Array.length", "length")}}.

fruits.length = 10;
console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
console.log(fruits.length); // 10

Однак, зменшення значення властивості {{jsxref("Array.length", "length")}} видаляє елементи.

fruits.length = 2;
console.log(Object.keys(fruits)); // ['0', '1']
console.log(fruits.length); // 2

Це пояснюється далі на сторінці {{jsxref("Array.length")}}.

Створення масиву з використанням результату пошуку збігів

Пошук збігів між регулярним виразом та рядком може створити масив JavaScript. Цей масив має властивості та елементи, які надають інформацію про збіг. Такий масив повертається методами {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}} та {{jsxref("String.replace")}}. Щоб краще пояснити ці властивості та елементи, подивіться на наступний приклад, а тоді зверніться до таблиці нижче:

// Пошук послідовності з однієї d, далі одна або більше b, далі одна d
// Запам'ятати всі b і d, яка йде за ними
// Ігнорувати регістр

var myRe = /d(b+)(d)/i;
var myArray = myRe.exec('cdbBdbsbz');

Властивості та елементи, які повертаються в результаті даного пошуку збігів:

Властивість/Елемент Опис Приклад
input Властивість тільки для читання, відображає початковий рядок, в якому виконується пошук збігів з регулярним виразом. cdbBdbsbz
index Властивість тільки для читання, індекс збігу у рядку, нумерується з нуля. 1
[0] Елемент тільки для читання, який містить символи останнього збігу. dbBd
[1], ...[n] Елементи тільки для читання, які містять підрядки збігу, що заключені у дужки, якщо такі є у регулярному виразі. Кількість можливих підрядків у дужках є необмеженою. [1]: bB
[2]: d

Властивості

Array.length
Властивість length конструктора Array, дорівнює 1.
{{jsxref("Array.prototype")}}
Дозволяє додавати властивості до усіх масивів.

Методи

{{jsxref("Array.from()")}}
Створює новий екземпляр Array з подібного до масиву або ітерабельного об'єкта.
{{jsxref("Array.isArray()")}}
Повертає true, якщо змінна є масивом, якщо ні, то повертає false.
{{jsxref("Array.of()")}}
Створює новий екземпляр Array з кількістю аргументів, заданих через змінну, незважаючи на кількість або тип аргументів.

Екземпляри Array

Всі екземпляри Array наслідуються від {{jsxref("Array.prototype")}}. Прототип конструктора Array може бути змінений, що вплине на всі екземпляри Array.

Властивості

{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Властивості')}}

Методи

Методи модифікації

{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_модифікації')}}

Методи доступу

{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_доступу')}}

Методи перебору

{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_перебору')}}

Загальні методи масивів

Загальні методи масивів є нестандартними, застарілими і будуть прибрані найближчим часом.

Іноді ви б хотіли застосувати методи масивів на рядках або інших подібних до масиву об'єктах (таких як {{jsxref("Functions/arguments", "arguments", "", 1)}} у функції). В такому випадку, ви розглядаєте рядок як масив символів (чи не об'єкт масиву як масив). Наприклад, для того, щоб перевірити, що кожний символ у змінній str є літерою, ви б написали:

function isLetter(character) {
  return character >= 'a' && character <= 'z';
}

if (Array.prototype.every.call(str, isLetter)) {
  console.log("Рядок '" + str + "' містить тільки літери!");
}

Такий запис є доволі марнотратним, і у JavaScript 1.6 було запроваджено загальне скорочення:

if (Array.every(str, isLetter)) {
  console.log("Рядок '" + str + "' містить тільки літери!");
}

{{jsxref("Global_Objects/String", "Загальні методи", "#String_generic_methods", 1)}} також доступні у {{jsxref("String", "рядках")}}.

Вони не є частиною стандартів ECMAScript і не підтримуються не Gecko оглядачами. У якості стандартної альтернативи, ви можете перетворити ваш об'єкт на справжній масив з допомогою методу {{jsxref("Array.from()")}}; хоча цей метод може не підтримуватися у старих оглядачах:

if (Array.from(str).every(isLetter)) {
  console.log("Рядок '" + str + "' містить тільки літери!");
}

Приклади

Створення масиву

Наступний приклад створює масив msgArray довжиною 0, потім додає значення елементам msgArray[0] та msgArray[99], змінюючи довжину масиву на 100.

var msgArray = [];
msgArray[0] = 'Привіт';
msgArray[99] = 'світ';

if (msgArray.length === 100) {
  console.log('Довжина масиву 100.');
}

Створення двовимірного масиву

Наступний код створює шахівницю у вигляді двовимірного масиву рядків. Перший хід робиться копіюванням 'п' з (6,4) до (4,4). Стара позиція (6,4) робиться порожньою.

var board = [
  ['Т','Н','С','Ф','К','С','Н','Т'],
  ['П','П','П','П','П','П','П','П'],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  ['п','п','п','п','п','п','п','П'],
  ['т','н','с','ф','к','с','н','т'] ];

console.log(board.join('\n') + '\n\n');

// Перемістити королівського пішака вперед на 2
board[4][4] = board[6][4];
board[6][4] = ' ';
console.log(board.join('\n'));

Ось результат:

Т,Н,С,Ф,К,С,Н,Т
П,П,П,П,П,П,П,П
 , , , , , , ,
 , , , , , , ,
 , , , , , , ,
 , , , , , , ,
п,п,п,п,п,п,п,п
т,н,с,ф,к,с,н,т

Т,Н,С,Ф,К,С,Н,Т
П,П,П,П,П,П,П,П
 , , , , , , ,
 , , , , , , ,
 , , , ,п, , ,
 , , , , , , ,
п,п,п,п, ,п,п,п
т,н,с,ф,к,с,н,т

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

Специфікація Статус Коментар
{{SpecName('ES1')}} {{Spec2('ES1')}} Початкове визначення.
{{SpecName('ES5.1', '#sec-15.4', 'Array')}} {{Spec2('ES5.1')}} Додано нові методи: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array.prototype.forEach", "forEach")}}, {{jsxref("Array.prototype.map", "map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}}
{{SpecName('ES6', '#sec-array-objects', 'Array')}} {{Spec2('ES6')}} Додано нові методи: {{jsxref("Array.from")}}, {{jsxref("Array.of")}}, {{jsxref("Array.prototype.find", "find")}}, {{jsxref("Array.prototype.findIndex", "findIndex")}}, {{jsxref("Array.prototype.fill", "fill")}}, {{jsxref("Array.prototype.copyWithin", "copyWithin")}}
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}} {{Spec2('ESDraft')}} Додано новий метод: {{jsxref("Array.prototype.includes()")}}

Сумісність з веб-оглядачами

{{Compat("javascript.builtins.Array")}}

Див. також