Renato Francia Castillo Renato Francia Castillo - 1 month ago 16
Javascript Question

Hard Copy vs Shallow copy javascript

This may be an old question but I'm really curious about the nature of copying objects by reference as an assignment in javascript.

Meaning that if

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


I'm kind of new to javascript and this really caught my attention to have a shallow copy as a default for Object assignment. I searched that in order to create a hard copy, you have to create a mixin. I was wondering why was this chosen as the default since it's transformation seems to be very implicit. Thanks!

Answer

Objects and arrays are treated as references to the same object. If you want to clone the object, there are several ways to do this.

In later browsers, you can do:

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

If you want to go for a library, lodash provides _.clone (and _.cloneDeep):

var b = _.clone(a);

If you don't want to do either of those methods, you can just enumerate through each key and value and assign them to a new object.

Oftentimes it's valuable for them to be treated as references when passing through multiple functions, etc. This isn't the case for primitives like numbers and strings, because that would feel pretty counterintuitive in most cases.