Skip to content

Commit

Permalink
update(JS): web/javascript/reference/global_objects/array/concat (#488)
Browse files Browse the repository at this point in the history
* update(JS): web/javascript/reference/global_objects/array/concat

* update(JS): web/javascript/reference/global_objects/array/concat
  • Loading branch information
undead404 authored Jul 24, 2022
1 parent 83f393c commit 84b08f9
Showing 1 changed file with 12 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ tags:
- Reference
- array.concat
- concat
- Polyfill
browser-compat: javascript.builtins.Array.concat
---

Expand All @@ -21,10 +22,10 @@ browser-compat: javascript.builtins.Array.concat
## Синтаксис

```js
concat()
concat(value0)
concat(value0, value1)
concat(value0, value1, ... , valueN)
concat();
concat(value0);
concat(value0, value1);
concat(value0, value1, /* … ,*/ valueN);
```

### Параметри
Expand All @@ -38,15 +39,15 @@ concat(value0, value1, ... , valueN)

## Опис

Метод `concat` створює новий масив. Цей масив спершу наповнюється елементами обєкта, на котрому `concat` викликали. Далі значення кожного аргументу причіплюється до масиву: для звичайних обєктів чи примітивів – сам аргумент стає елементом результівного масиву, а для масивів чи масивоподібних обєктів зі властивістю [`Symbol.isConcatSpreadable`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable), що має значення істинності, кожен елемент аргументу буде окремо доданий до результівного масиву. Метод `concat` не виконує рекурсії на вкладених масивах аргументів.
Метод `concat` створює новий масив. Цей масив спершу наповнюється елементами об'єкта, на котрому `concat` викликали. Далі значення кожного аргументу причіплюється до масиву: для звичайних об'єктів чи примітивів – сам аргумент стає елементом результівного масиву, а для масивів чи масивоподібних об'єктів зі властивістю [`Symbol.isConcatSpreadable`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable), що має значення істинності, кожен елемент аргументу буде окремо доданий до результівного масиву. Метод `concat` не виконує рекурсії на вкладених масивах аргументів.

Метод `concat` не міняє ані `this`, ані жодного з масивів, переданих як аргументи, а натомість повертає [поверхневу копію](/uk/docs/Glossary/Shallow_copy), що містить копії тих самих елементів, що були у вихідних масивах. Елементи вихідних масивів копіюються в новий масив наступним чином:

- Посилання на обєкти (а не сам обєкт): `concat` копіює в новий масив посилання на обєкти. Як вихідний, так і новий масиви посилаються на одні обєкти. А отже – при змінах відповідного обєкта зміни будуть помітні як в новому, так у вихідному масиві. Це так само діє для масивів, які є елементами аргументів.
- Типи даних типу рядків, чисел та булевих значень (але не обєкти {{jsxref("Global_Objects/String", "String")}}, {{jsxref("Global_Objects/Number", "Number")}} і {{jsxref("Global_Objects/Boolean", "Boolean")}}):
- Посилання на об'єкти (а не сам об'єкт): `concat` копіює в новий масив посилання на об'єкти. Як вихідний, так і новий масиви посилаються на одні об'єкти. А отже – при змінах відповідного об'єкта зміни будуть помітні як в новому, так у вихідному масиві. Це так само діє для масивів, які є елементами аргументів.
- Типи даних типу рядків, чисел та булевих значень (але не об'єкти {{jsxref("Global_Objects/String", "String")}}, {{jsxref("Global_Objects/Number", "Number")}} і {{jsxref("Global_Objects/Boolean", "Boolean")}}):
`concat` копіює значення рядків та чисел у новий масив.

> **Примітка:** Зчеплення масиву (масивів) та (або) значення (значень) залишить оригінальні значення без змін. Понад те, будь-яка операція з новим масивом (окрім операцій на елементах, котрі є посиланнями на обєкти) не матиме ефекту на вихідних масивах, і навпаки.
> **Примітка:** Зчеплення масиву (масивів) та (або) значення (значень) залишить оригінальні значення без змін. Понад те, будь-яка операція з новим масивом (окрім операцій на елементах, котрі є посиланнями на об'єкти) не матиме ефекту на вихідних масивах, і навпаки.
## Приклади

Expand Down Expand Up @@ -111,9 +112,9 @@ console.log(numbers);
// дає [[1, 4], 2, [3]]
```

### Зчеплення масивоподібних обєктів за допомогою Symbol.isConcatSpreadable
### Зчеплення масивоподібних об'єктів за допомогою Symbol.isConcatSpreadable

`concat` усталено не розглядає всі масивоподібні обєкти як масиви: він це робить лише якщо властивість `Symbol.isConcatSpreadable` має значення істинності (наприклад, `true`.)
`concat` усталено не розглядає всі масивоподібні об'єкти як масиви: він це робить лише якщо властивість `Symbol.isConcatSpreadable` має значення істинності (наприклад, `true`.)

```js
const obj1 = { 0: 1, 1: 2, 2: 3, length: 3 };
Expand All @@ -132,6 +133,7 @@ console.log([0].concat(obj1, obj2));

## Дивіться також

- [Поліфіл для `Array.prototype.concat` доступний в складі `core-js`, разом з виправленнями й реалізацією сучасної логіки типу підтримки `Symbol.isConcatSpreadable`](https://github.com/zloirock/core-js#ecmascript-array)
- {{jsxref("Array.push", "push")}} / {{jsxref("Array.pop", "pop")}} — щоб додати чи прибрати елементи в кінці масиву
- {{jsxref("Array.unshift", "unshift")}} / {{jsxref("Array.shift", "shift")}} — щоб додати чи прибрати елементи на початку масиву
- {{jsxref("Array.splice", "splice")}} — щоб додати чи прибрати елементи у вказаному місці масиву
Expand Down

0 comments on commit 84b08f9

Please sign in to comment.