user10780967
user10780967

Reputation:

Javascript Object.assign not behaving as expected

In the following Javascript, the result is that it displays 1, 2, 3. I would expect it to display: 1, 2, 2. My understanding was that Object.assign would copy the values in an object.

var myobj = {
  mynum: 1,
  mystr: "test",
  mydata: 6
}
alert(myobj.mynum);

let secondobj = myobj;
secondobj.mynum = 2;
alert(myobj.mynum);

let thirdobj = Object.assign(myobj);
thirdobj.mynum = 3;
alert(myobj.mynum);

Upvotes: 1

Views: 88

Answers (2)

NaN
NaN

Reputation: 1985

It is the same object

var foo = {}
var bar = Object.assign(foo)
console.log(foo === bar) // true

To copy object values use

var bar = Object.assign({}, foo)

or spread operator (new in ECMAScript 2018)

var bar = { ...foo };

For your case

let thirdobj = Object.assign({}, myobj);

Upvotes: 2

Pärt Johanson
Pärt Johanson

Reputation: 1650

The definition is Object.assign(target, source)

So, this would work:

var myobj = {mynum: 1, mystr: "test", mydata: 6}
alert(myobj.mynum);

let secondobj = myobj;
secondobj.mynum = 2;
alert(myobj.mynum);

let thirdobj = {};
Object.assign(thirdobj, myobj);
thirdobj.mynum = 3;
alert(myobj.mynum);

You could also use:

let thirdobj = { ... myobj};
thirdobj.mynum = 3;
alert(myobj.mynum);

for brevity

Upvotes: 0

Related Questions