← Назад к вопросам

Что возвращает Concat?

2.2 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что возвращает метод concat()?

Метод concat() возвращает новый массив, состоящий из элементов исходного массива, за которыми следуют элементы, переданные в качестве аргументов. Это один из неизменяющих (immutable) методов массива в JavaScript — он не изменяет исходный массив, а создаёт и возвращает новый.

Основные характеристики возвращаемого значения:

  1. Всегда новый массив — даже если не переданы аргументы или исходный массив пуст.
  2. Поверхностная копия (shallow copy) — элементы нового массива являются ссылками на те же объекты, что и в исходном.
  3. Сохранение порядка — элементы добавляются в том порядке, в котором переданы аргументы.

Синтаксис и примеры:

const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const result = arr1.concat(arr2);

console.log(result); // [1, 2, 3, 4, 5]
console.log(arr1);   // [1, 2, 3] — исходный массив не изменился

Особенности работы:

  • Аргументы могут быть любого типа — примитивы, массивы, объекты. Если передаётся массив, его элементы "распаковываются" (кроме вложенных массивов).
  • Не изменяет this — безопасен для функционального программирования.
  • Работает с разреженными массивами — сохраняет "дыры" (пустые слоты).
// Пример с разными типами аргументов
const base = [1, 2];
const newArray = base.concat(3, [4, 5], [[6]]);

console.log(newArray); // [1, 2, 3, 4, 5, [6]]
// Обратите внимание: вложенный массив [[6]] не был распакован

Сравнение с spread-оператором:

В современном JavaScript аналогичного результата можно достичь с помощью spread-оператора:

const arr1 = [1, 2];
const arr2 = [3, 4];
const concatResult = arr1.concat(arr2);
const spreadResult = [...arr1, ...arr2];

console.log(concatResult); // [1, 2, 3, 4]
console.log(spreadResult); // [1, 2, 3, 4]

Ключевые отличия:

  • concat() — метод, вызываемый на массиве
  • Spread-оператор — синтаксис, работающий внутри литералов массивов
  • concat() может принимать примитивы напрямую, а spread — только итерируемые объекты

Важные нюансы:

  • Для вложенных объектов — создаётся поверхностная копия:
const obj = { x: 10 };
const arr1 = [obj];
const arr2 = arr1.concat();

arr2[0].x = 20;
console.log(arr1[0].x); // 20 — объект тот же!
  • Производительность — в большинстве случаев concat() работает быстрее, чем последовательные вызовы push() с spread, особенно для больших массивов.
  • Использование с null/undefined — эти значения передаются как есть:
console.log([1].concat(null, undefined)); // [1, null, undefined]

Практическое применение:

  • Объединение данных из нескольких источников
  • Иммутабельные обновления в Redux или React state
  • Создание копий с добавлением новых элементов

Таким образом, concat() — это предсказуемый и безопасный метод для создания нового массива путём объединения существующего с дополнительными значениями, сохраняющий исходные данные неизменными.