Reputation:
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
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
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