#nodejs_api
Как вы знаете объекты в отличие от примитивов передаются по ссылке, а не по значению. Поэтому, когда вам нужна копия объекта, приходиться прибегать к определенным ухищрениям.
Native JavaScript предлагает два варианта копирования:
– Через spread оператор
const copied = { ...original }– Через Object.assign
const copied = Object.assign({}, original)Эти варианты работают только на первом уровне объекта. Для глубокого копирования необходимо использовать рекурсию или пакеты (см lodash.cloneDeep). В простых случаях можно использовать
JSON.parse(JSON.stringify(obj)), но имейте ввиду так можно потерять данные.Текущий способ для Node.js это использование модуля v8:
const v8 = require('v8');const copied = v8.deserialize(v8.serialize(original))Но через год это измениться. Задача настолько часто встречается, что разработчики JS движков придумали structuredClone. Пока внедрено только в Firefox 94 и Node.js v17.