Spec-Zone.ru › JavaScript

Array.prototype.concat()

Базовая версия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Метод concat() экземпляров Array используется для объединения двух или более массивов. Этот метод не изменяет существующие массивы, а возвращает новый массив.

Попробовать

const array1 = ["a", "b", "c"];
const array2 = ["d", "e", "f"];
const array3 = array1.concat(array2);

console.log(array3);
// Expected output: Array ["a", "b", "c", "d", "e", "f"]

Синтаксис

concat()
concat(value1)
concat(value1, value2)
concat(value1, value2, /* …, */ valueN)

Параметры

value1, …, valueN Необязательно
Массивы и/или значения, которые нужно объединить в новый массив. Если все параметры valueN опущены, concat возвращает поверхностную копию существующего массива, для которого он был вызван. Подробнее см. в описании ниже.

Возвращаемое значение

Новый экземпляр Array.

Описание

Метод concat создаёт новый массив. Сначала массив заполняется элементами объекта, для которого он был вызван. Затем для каждого аргумента его значение конкатенируется в массив — для обычных объектов или примитивов сам аргумент становится элементом итогового массива; для массивов или массивоподобных объектов со свойством Symbol.isConcatSpreadable, установленным в истинное значение (truthy value), каждый элемент аргумента будет независимо добавлен в итоговый массив. Метод concat не выполняет рекурсивный обход вложенных аргументов-массивов.

Метод concat() является методом копирования. Он не изменяет this или какие-либо массивы, предоставленные в качестве аргументов, но вместо этого возвращает поверхностную копию, которая содержит те же элементы, что и исходные массивы.

Метод concat() сохраняет пустые слоты, если какой-либо из исходных массивов является разреженным.

Метод concat() является обобщённым. Значение this обрабатывается так же, как и другие аргументы (за исключением того, что оно сначала будет преобразовано в объект), что означает, что простые объекты будут непосредственно добавлены в результирующий массив, в то время как массивоподобные объекты с истинным значением [Symbol.isConcatSpreadable] будут развёрнуты (spread) в результирующий массив.

Примеры

Объединение двух массивов

Следующий код объединяет два массива:

const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];

const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]

Объединение трёх массивов

Следующий код объединяет три массива:

const num1 = [1, 2, 3];
const num2 = [4, 5, 6];
const num3 = [7, 8, 9];

const numbers = num1.concat(num2, num3);

console.log(numbers);
// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]

Объединение значений с массивом

Следующий код объединяет три значения с массивом:

const letters = ["a", "b", "c"];

const alphaNumeric = letters.concat(1, [2, 3]);

console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]

Объединение вложенных массивов

Следующий код объединяет вложенные массивы и демонстрирует сохранение ссылок:

const num1 = [[1]];
const num2 = [2, [3]];

const numbers = num1.concat(num2);

console.log(numbers);
// results in [[1], 2, [3]]

// modify the first element of num1
num1[0].push(4);

console.log(numbers);
// results in [[1, 4], 2, [3]]

Объединение массивоподобных объектов с помощью Symbol.isConcatSpreadable

concat по умолчанию не обрабатывает все массивоподобные объекты как массивы — только если Symbol.isConcatSpreadable установлен в истинное значение (например, true).

const obj1 = { 0: 1, 1: 2, 2: 3, length: 3 };
const obj2 = { 0: 1, 1: 2, 2: 3, length: 3, [Symbol.isConcatSpreadable]: true };
console.log([0].concat(obj1, obj2));
// [ 0, { '0': 1, '1': 2, '2': 3, length: 3 }, 1, 2, 3 ]

Использование concat() на разреженных массивах

Если какой-либо из исходных массивов разрежен, результирующий массив также будет разреженным:

console.log([1, , 3].concat([4, 5])); // [1, empty, 3, 4, 5]
console.log([1, 2].concat([3, , 5])); // [1, 2, 3, empty, 5]

Вызов concat() для не-массивов

Если значение this не является массивом, оно преобразуется в объект, а затем обрабатывается так же, как аргументы для concat(). В этом случае возвращаемое значение всегда представляет собой простой новый массив.

console.log(Array.prototype.concat.call({}, 1, 2, 3)); // [{}, 1, 2, 3]
console.log(Array.prototype.concat.call(1, 2, 3)); // [ [Number: 1], 2, 3 ]
const arrayLike = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: 1,
  1: 2,
  2: 99, // ignored by concat() since length is 2
};
console.log(Array.prototype.concat.call(arrayLike, 3, 4)); // [1, 2, 3, 4]

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

Спецификация
ECMAScript® 2027 Language Specification
# sec-array.prototype.concat

Совместимость с браузерами

Десктопные Мобильные Серверные
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
concat
1
12
1
4
1
18
4
10.1
1
1.0
1
1
1.0.0
1.0
0.10.0

Смотрите также

  • Полифил Array.prototype.concat в core-js с исправлениями и реализацией современного поведения, такого как поддержка Symbol.isConcatSpreadable
  • Полифил es-shims для Array.prototype.concat
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.push()
  • Array.prototype.unshift()
  • Array.prototype.splice()
  • String.prototype.concat()
  • Symbol.isConcatSpreadable

© 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/concat

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API