简体   繁体   English

Javascript Object.assign行为异常

[英]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. 在以下Javascript中,结果是它显示1、2、3。我希望它显示为: Object.assign 。我的理解是Object.assign会将值复制到一个对象中。

 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); 

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) 或散布运算符(ECMAScript 2018中的新增功能)

var bar = { ...foo };

For your case 对于你的情况

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

The definition is Object.assign(target, source) 定义为Object.assign(目标,源)

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 为了简洁

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM