Твердая копия против мелкой копии 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);
Если вы не хотите использовать ни один из этих методов, вы можете просто перечислить все ключи и значения и назначить их новому объекту.
Часто полезно, чтобы их обрабатывали как ссылки при прохождении через несколько функций и т. Д. Это не относится к примитивам, таким как числа и строки, потому что в большинстве случаев это кажется довольно нелогичным.