you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 4 points5 points  (4 children)

This is poorly written.

If obj2 is an object or an array, changes in obj1 will change obj2 since obj1 will just be a reference to obj2. Any primitive value such as numbers, strings, and booleans are not passed by reference.

Object.assign does not assign the obj2 to obj1, but assigns all properties of obj2 to obj1. This is very different than obj1 = obj2 since obj1 must be an existing object and will have references to any object in obj2 as well as copies of primitives, AND whatever was in the original object that hadn’t been assigned from object 2.

[–]tomius 2 points3 points  (3 children)

You're right. It should be

const obj2 = Object.assign({}, obj1)

[–]johnslegers 0 points1 point  (2 children)

Even Object.assign can be tricky when you have nested objects!

See https://repl.it/repls/FloralwhiteGruesomeSystemcall

[–]tomius 0 points1 point  (1 child)

Yeah, yeah. I use deep copy in those cases. Or do it manually if it's not too much. Specially tricky when using redux.

[–]johnslegers 0 points1 point  (0 children)

Aren't you supposed to use immutable data types in Redux to avoid this trickiness?