Array.prototype.concat()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2015å¹´7æâ©.
Array 實ä¾ç concat() æ¹æ³ç¨æ¼åä½µå
©åææ´å¤çé£åãæ¤æ¹æ³ä¸ææ¹è®åæçé£åï¼èæ¯è¿åä¸åæ°çé£åã
å試ä¸ä¸
const array1 = ["a", "b", "c"];
const array2 = ["d", "e", "f"];
const array3 = array1.concat(array2);
console.log(array3);
// é æè¼¸åºï¼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 屬æ§è¨çºçå¼çé£åæé¡é£åç©ä»¶ï¼æ¯åå
ç´ æè¢«ç¨ç«å°å å
¥æçµçé£åä¸ãconcat æ¹æ³ä¸æéè¿´èçå·¢çé£å弿¸ã
concat() æ¹æ³æ¯è¤è£½æ¹æ³ãå®ä¸ææ¹è® this æä»»ä½ä½çºå¼æ¸å³å
¥çé£åï¼èæ¯è¿åä¸åæ·ºè¤è£½ï¼è©²è¤è£½å
å«èåå§é£åç¸åçå
ç´ ã
妿任ä¸å便ºé£åæ¯ç¨çé£åï¼concat() æ¹æ³æä¿ç空槽ã
concat() æ¹æ³æ¯éç¨æ¹æ³ãthis å¼çèçæ¹å¼èå
¶ä»å¼æ¸ç¸åï¼é¤äºå®æå
è¢«è½æçºç©ä»¶ï¼ï¼æå³èæ®éç©ä»¶æè¢«ç´æ¥å å°çµæé£åçæå端ï¼èå
·æ [Symbol.isConcatSpreadable] çºçå¼çé¡é£åç©ä»¶åæè¢«å±é並å å
¥çµæé£åã
ç¯ä¾
>åä½µå ©åé£å
以ä¸ç¨å¼ç¢¼å°å ©åé£ååä½µï¼
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];
const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// çµæçº ['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);
// çµæçº [1, 2, 3, 4, 5, 6, 7, 8, 9]
åä½µå¼å°é£åä¸
以ä¸ç¨å¼ç¢¼å°ä¸åå¼åä½µå°é£åä¸ï¼
const letters = ["a", "b", "c"];
const alphaNumeric = letters.concat(1, [2, 3]);
console.log(alphaNumeric);
// çµæçº ['a', 'b', 'c', 1, 2, 3]
å併巢çé£å
以ä¸ç¨å¼ç¢¼å°å·¢çé£ååä½µï¼ä¸¦ç¤ºç¯å¼ç¨çä¿çï¼
const num1 = [[1]];
const num2 = [2, [3]];
const numbers = num1.concat(num2);
console.log(numbers);
// çµæçº [[1], 2, [3]]
// ä¿®æ¹ num1 ç第ä¸åå
ç´
num1[0].push(4);
console.log(numbers);
// çµæçº [[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, // 被 concat() 忽ç¥ï¼å çº length æ¯ 2
};
console.log(Array.prototype.concat.call(arrayLike, 3, 4)); // [1, 2, 3, 4]
è¦ç¯
| Specification |
|---|
| ECMAScript® 2026 Language Specification > # sec-array.prototype.concat > |
ç覽å¨ç¸å®¹æ§
åè¦
core-jsä¸Array.prototype.concatç polyfillï¼å å«ä¿®æ£åç¾ä»£è¡çºç實ä½ï¼å¦Symbol.isConcatSpreadableçæ¯æ´Array.prototype.concatç es-shims polyfill- ç´¢å¼éåæå
ArrayArray.prototype.push()Array.prototype.unshift()Array.prototype.splice()String.prototype.concat()Symbol.isConcatSpreadable