Array.prototype.concat()

基线 广泛可用

此功能已得到良好建立,并且可在许多设备和浏览器版本上运行。自以下日期起,它已在所有浏览器中可用 2015年7月.

concat()Array 实例的方法,用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

试一试

语法

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

参数

value1,…,valueN 可选

要连接到新数组的数组和/或值。如果省略所有 valueN 参数,则 concat 返回其调用的现有数组的 浅拷贝。有关更多详细信息,请参阅下面的说明。

返回值

一个新的 Array 实例。

描述

concat 方法创建一个新数组。该数组将首先填充调用它的对象中的元素。然后,对于每个参数,其值将连接到数组中——对于普通对象或基本类型,参数本身将成为最终数组的元素;对于具有设置为真值的属性 Symbol.isConcatSpreadable 的数组或类数组对象,参数的每个元素将独立添加到最终数组中。concat 方法不会递归到嵌套的数组参数中。

concat() 方法是 复制方法。它不会更改 this 或作为参数提供的任何数组,而是返回一个包含与原始数组中相同的元素的 浅拷贝

如果任何源数组是 稀疏的,则 concat() 方法会保留空插槽。

concat() 方法是 泛型的this 值的处理方式与其他参数相同(除了它将首先转换为对象),这意味着普通对象将直接前置到结果数组中,而具有真值 [Symbol.isConcatSpreadable] 的类数组对象将扩展到结果数组中。

示例

连接两个数组

以下代码连接两个数组

js
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]

连接三个数组

以下代码连接三个数组

js
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]

将值连接到数组

以下代码将三个值连接到数组

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

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

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

连接嵌套数组

以下代码连接嵌套数组并演示引用保留

js
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)时才会这样。

js
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()

如果任何源数组是稀疏的,则结果数组也将是稀疏的

js
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() 参数相同的方式处理。在这种情况下,返回值始终是新的普通数组。

js
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 语言规范
# sec-array.prototype.concat

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅