Примитивы, ссылки, копирование
В чём разница между примитивами и ссылочными типами?
Примитивы (копируются по значению):
string, number, boolean, null, undefined, symbol, bigint
Ссылочные типы (копируются по ссылке):
Object, Array, Function, Date, Map, Set
// Примитив
let a = 5;
let b = a;
b = 10;
console.log(a); // 5 — не изменился
// Объект
let obj1 = { x: 1 };
let obj2 = obj1;
obj2.x = 99;
console.log(obj1.x); // 99 — изменился!Что такое shallow copy и deep copy?
Shallow copy — копирует только верхний уровень. Вложенные объекты остаются общими.
const copy = { ...original };
const copy = Object.assign({}, original);
const copy = original.slice(); // для массивовDeep copy — полная независимая копия на всех уровнях.
const copy = structuredClone(original); // современный способ
const copy = JSON.parse(JSON.stringify(original)); // теряет undefined/Date/Function
structuredCloneдоступен в современных браузерах и Node.js 17+.
См. также
- js-objects-async — таблица сериализации при копировании объектов