Твердая копия против мелкой копии javascript

Это может быть старый вопрос, но мне действительно любопытно, как копировать объекты по ссылке в качестве задания в javascript.

Это означает, что если

var a = {}; 
var b = a;
a.name = "Renato";
console.log(b); 
Object {name: "renato"}

Я новичок в javascript, и это действительно привлекло мое внимание, чтобы иметь мелкую копию по умолчанию для назначения объектов. Я искал это, чтобы создать печатную копию, вы должны создать миксин. Мне было интересно, почему это было выбрано в качестве значения по умолчанию, поскольку его преобразование кажется очень неявным. Спасибо!

1 ответ

Решение

Объекты и массивы обрабатываются как ссылки на один и тот же объект. Если вы хотите клонировать объект, есть несколько способов сделать это.

В более поздних браузерах вы можете делать:

var b = Object.assign({}, a);

Если вы хотите пойти в библиотеку, lodash предоставляет _.clone (а также _.cloneDeep):

var b = _.clone(a);

Если вы не хотите использовать ни один из этих методов, вы можете просто перечислить все ключи и значения и назначить их новому объекту.

Часто полезно, чтобы их обрабатывали как ссылки при прохождении через несколько функций и т. Д. Это не относится к примитивам, таким как числа и строки, потому что в большинстве случаев это кажется довольно нелогичным.

Другие вопросы по тегам