edubun
Русский

Массивы

Массив хранит много значений по порядку под одним именем. В ["red", "green", "blue"] значение "red" стоит под индексом 0, а длина равна 3.

Список в одной переменной

Допустим, программа следит за оценками целого класса. С тридцатью переменными score1, score2, score3 работать мучительно, и пройти по ним циклом невозможно. Массив представляет собой одно значение, в котором хранится упорядоченный список других значений. Его пишут в квадратных скобках через запятую:

const fruits = ["apple", "banana", "cherry"];
console.log(fruits.length);   // 3
console.log(fruits[0]);       // apple
console.log(fruits[2]);       // cherry

Каждое значение в массиве называется элементом. Элементы нумеруются индексами начиная с 0, точно так же, как символы в строке. Значит, первый элемент fruits[0], а последний fruits[fruits.length - 1]. Обращение к несуществующему индексу, например fruits[10], не вызывает ошибку; оно даёт undefined. В массиве может храниться значение любого вида, и элементы даже не обязаны быть одного типа, хотя на практике обычно так и есть.

Изменение массива

В отличие от строк, массивы можно менять на месте. Присвой значение по индексу, чтобы заменить элемент: fruits[1] = "blueberry". Метод push добавляет элемент в конец, а pop убирает последний и возвращает его. unshift и shift делают то же в начале. Это работает, даже если массив объявлен через const. const лишь не даёт имени указывать на другой массив; содержимое он не замораживает.

const list = ["milk", "eggs"];
list.push("bread");
console.log(list.length);        // 3
const last = list.pop();
console.log(last);               // bread
console.log(list.join(", "));    // milk, eggs

Ещё два метода отвечают на вопросы. includes(x) даёт true, если x есть в массиве, а indexOf(x) даёт его индекс или -1, если его нет. join(", ") склеивает все элементы в одну строку с заданным разделителем между ними, и это самый простой способ аккуратно напечатать список.

Проход по массиву

Массивы и циклы созданы друг для друга. Цикл for с индексом от 0 до длины, не включая её, посещает каждый элемент. Цикл for...of короче, когда нужны только значения, а не их позиции:

const scores = [70, 85, 90, 55];

for (let i = 0; i < scores.length; i++) {
  console.log(i, scores[i]);
}

let total = 0;
for (const s of scores) {
  total += s;
}
console.log(total / scores.length);   // 75

Обрати внимание на условие i < scores.length: там <, а не <=. При четырёх элементах индексы идут от 0 до 3, и с <= цикл заглянул бы на шаг дальше конца. Эта ошибка на единицу (off-by-one) является одной из самых частых во всём программировании.

Два имени, один массив

Числа и строки копируются, когда их присваивают другой переменной, а массивы нет. После const a = [1, 2]; const b = a; оба имени указывают на один и тот же массив, поэтому b.push(3) меняет и то, что видно через a: теперь a.length равно 3. Если нужна отдельная копия, напиши const b = [...a];, это раскладывает элементы a в совершенно новый массив. Объекты, о которых следующий урок, ведут себя так же.

Поля для практики на этом сайте печатают массивы в компактном виде, например ["a","b"] или [1,2,3]. Консоль в инструментах разработчика браузера добавляет пробелы и может показывать их иначе. Если нужен точный контроль над выводом, используй join.

Разобранный пример. Найди наибольшее число в [4, 17, 9, 12] без Math.max. Начни с let best = nums[0], пройди циклом по остальным и каждый раз, когда элемент больше best, сохраняй его в best. После цикла best равно 17. Тот же приём, переменная, которая помнит лучшее на данный момент, находит самое длинное слово, самую низкую цену или самую раннюю дату.

массивУпорядоченный список значений в [ ]
элементОдно значение внутри массива
arr[0]Первый элемент
arr[arr.length - 1]Последний элемент
push / popДобавить в конец / убрать с конца
includestrue, если значение есть в массиве
joinСклеить элементы в одну строку
for...ofЦикл по значениям массива
ошибка на единицу (off-by-one)Шаг лишний или шаг недостающий, часто <= вместо <
  1. Что выведет этот код?
    const a = [10, 20, 30];
    console.log(a[1]);
  2. Что выведет этот код?
    const a = [10, 20, 30];
    console.log(a.length);
  3. Что выведет этот код?
    const a = ["x", "y", "z"];
    console.log(a[a.length - 1]);
  4. Что выведет этот код?
    const a = [1, 2];
    a.push(3);
    a.push(4);
    console.log(a.length);
  5. Что выведет этот код?
    const a = [5, 6, 7];
    const x = a.pop();
    console.log(x, a.length);
    • 7 2
    • 5 2
    • 7 3
  6. Что выведет этот код?
    const a = ["cat", "dog"];
    console.log(a.indexOf("bird"));
  7. Что выведет этот код?
    const a = ["a", "b", "c"];
    console.log(a.join("-"));
  8. Что выведет этот код?
    const a = [3, 4, 5];
    let t = 0;
    for (const n of a) {
      t += n;
    }
    console.log(t);
  9. Что выведет этот код?
    const a = [1, 2, 3];
    a[0] = 9;
    console.log(a[0] + a[2]);
  10. Что выведет этот код?
    const a = ["red", "green"];
    console.log(typeof a[5]);
    • undefined
    • Ошибку
    • string
  11. Какой заголовок цикла посещает каждый индекс arr ровно один раз?
    • for (let i = 0; i < arr.length; i++)
    • for (let i = 0; i <= arr.length; i++)
    • for (let i = 1; i <= arr.length; i++)
Главное
  • Массивы хранят упорядоченные значения в [ ]; индексы начинаются с 0.
  • Последний элемент: arr[arr.length - 1].
  • push и pop добавляют и убирают в конце; содержимое массива const всё равно можно менять.
  • includes, indexOf и join отвечают на частые вопросы.
  • Перебирай i от 0, пока i < length, или используй for...of для значений.
Источники курса (2)
  • MDN Web Docs, JavaScript Guide (developer.mozilla.org/en-US/docs/Web/JavaScript/Guide, chapters Introduction, Grammar and types, Control flow, Loops and iteration, Functions, Expressions and operators, Numbers and strings, Indexed collections, Working with objects; checked 2026-10-17)
  • Ecma International, ECMA-262 ECMAScript 2026 Language Specification, 17th edition, June 2026 (tc39.es/ecma262 and ecma-international.org/publications-and-standards/standards/ecma-262, checked 2026-10-17)

Проверено: 2026-10-17