Очень просто!

Составной тип данных JavaScript — это набор данных одной или разных категорий. Объекты и массивы — простейшие примеры того же.

Примитивные типы копируются по значению, тогда как составные типы данных по умолчанию передаются по ссылке. Чтобы узнать больше об этом, я рекомендую прочитать этот блог.

Давайте начнем с понимания того, что означает копировать по значению.

В следующем примере:

  • У нас есть две переменные, а именно num1 и num2.
  • num1 имеет значение 10, которое позже копируется путем прямого присвоения num1 num2.
  • Когда мы печатаем их на консоли, мы видим, что и num1, и num2 равны 10.
  • Теперь мы меняем значение num2 на 7, а затем снова печатаем две переменные.
  • Здесь мы замечаем, что num1остается 10, но num2теперь 7.

Это копирование по значению, что означает, что изменение одного значения не влияет на значение другого. Так как примитивы неизменяемы и поэтому по умолчанию они всегда копируются по значению.

Теперь давайте посмотрим, как составные типы копируются по умолчанию.

В следующем примере:

  • Мы выполнили те же шаги, что и в предыдущем примере. Единственное отличие состоит в том, что у нас есть два массива, массив1 и массив2, а не два числа.
  • Здесь вы можете ясно видеть, как я изменяю массив2,те же изменения отражаются и в массиве1.

Это составные типы данных, которые по умолчанию копируются по ссылке в JavaScript.

Копировать составной тип по значению

Чтобы копировать по значению составной тип, проще всего использовать оператор распространения «[…]».

Давайте разберемся в этом на другом подобном примере. На этот раз мы изменим как массив2, так и массив3, но содержимое массива1 будет скопировано в массив3 с помощью оператора […], а массив1 будет скопировано в массив2, как и в предыдущем примере. Здесь мы можем ясно видеть на иллюстрации ниже, что изменения, внесенные в массив3, не отражаются в массиве1, но изменения, сделанные в массиве2, отражаются как в массиве2, так и в массив1.

Это самый простой известный мне способ копирования составного типа по значению. Может быть еще много.

Ура!