Оператор spread в JS

В этой статье вы подробнее познакомитесь с оператором spread в JavaScript.

Оператор spread ... появился в версии ES6.

Оператор позволяет растягивать массивы. С его помощью обычно копируют или сливают массивы. Например, так:

const arrValue = ['Меня', 'зовут', 'Андрей', 'Карпов'];

console.log(arrValue);   // Вывод: ["Меня", "зовут", "Андрей", "Карпов"]
console.log(...arrValue); // Вывод: Меня зовут Андрей Карпов

Строчка console.log(...arrValue) в этом случае эквивалентна такой записи: console.log('Меня', 'зовут', 'Андрей', 'Карпов').

Копирование массива

Оператор spread ... позволяет копировать элементы в один массив. Например:

const arr1 = ['один', 'два'];
const arr2 = [...arr1, 'три', 'четыре', 'пять'];

console.log(arr2); 
//  Вывод: ["один", "два", "три", "четыре", "пять"]

Клонирование массива

В JavaScript объекты присваиваются и копируются по ссылке, а не по значениям. Например:

let arr1 = [ 1, 2, 3];
let arr2 = arr1;

console.log(arr1); // Вывод: [1, 2, 3]
console.log(arr2); // Вывод: [1, 2, 3]

// добавляем элемент в массив
arr1.push(4);

console.log(arr1); // Вывод: [1, 2, 3, 4]
console.log(arr2); // Вывод: [1, 2, 3, 4]

Обе переменные arr1 и arr2 ссылаются на один и тот же массив. То есть изменение одной переменной приводит к изменению обеих переменных.

Однако если вы хотите скопировать массивы так, чтобы они не ссылались на один и тот же массив, вы можете использовать оператор spread. Так изменения в одном массиве не отразятся на другом. Например:

let arr1 = [ 1, 2, 3];

// копируем с помощью оператора spread
let arr2 = [...arr1];

console.log(arr1); // Вывод: [1, 2, 3]
console.log(arr2); // Вывод: [1, 2, 3]

// добавляем элемент в массив
arr1.push(4);

console.log(arr1); // Вывод: [1, 2, 3, 4]
console.log(arr2); // Вывод: [1, 2, 3]

Оператор spread с объектами

Оператор spread точно так же работает и с объектами, только вместо элементов работает со свойствами. Например: 

const obj1 = { x : 1, y : 2 };
const obj2 = { z : 3 };

// добавляем свойства obj1 и obj2 в obj3
const obj3 = {...obj1, ...obj2};

console.log(obj3); // Вывод: {x: 1, y: 2, z: 3}

Как вы видите, все свойства объектов obj1 и obj2 стали свойствами объекта obj3.

Остаточные параметры

Когда оператор spread используется в качестве параметра, его называют остаточным параметром (rest parametr).

Синтаксис остаточных параметров функции позволяет представлять неограниченное множество аргументов в виде массива.

let func = function(...args) {
    console.log(args);
}

func(3); // Вывод: [3]
func(4, 5, 6); // Вывод: [4, 5, 6]
  • Когда в функцию func() передается 1 аргумент, остаточный параметр принимает только один параметр.
  • Когда в функцию func() передается 3 аргумента, остаточный параметр принимает все три параметра.

Примечание. Когда вы используете остаточные параметры, аргумент передаются в функцию в качестве элементов массива.

Вы также можете передать в функцию несколько аргументов с помощью оператора spread. Например: 

function sum(x, y ,z) {
    console.log(x + y + z);
}

const num1 = [1, 3, 4, 5];

sum(...num1); // Вывод: 8

Если вы передаете несколько аргументов с помощью оператора spread, функция принимает только необходимые аргументы, а остальные игнорирует.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©