Javascript Object.assign未按预期运行

Javascript Object.assign未按预期运行,javascript,Javascript,在下面的Javascript中,结果是显示1、2、3。我希望它能显示:1,2,2。我的理解是,Object.assign会复制对象中的值 var myobj={ mynum:1, mystr:“测试”, 我的数据:6 } 警报(myobj.mynum); 设secondobj=myobj; secondobj.mynum=2; 警报(myobj.mynum); 设thirdobj=Object.assign(myobj); thirdobj.mynum=3; 警报(myobj.mynum)它是

在下面的Javascript中,结果是显示1、2、3。我希望它能显示:1,2,2。我的理解是,
Object.assign
会复制对象中的值

var myobj={
mynum:1,
mystr:“测试”,
我的数据:6
}
警报(myobj.mynum);
设secondobj=myobj;
secondobj.mynum=2;
警报(myobj.mynum);
设thirdobj=Object.assign(myobj);
thirdobj.mynum=3;
警报(myobj.mynum)它是同一个对象

var foo = {}
var bar = Object.assign(foo)
console.log(foo === bar) // true
要复制对象值,请使用

var bar = Object.assign({}, foo)
或排列运算符(ECMAScript 2018中新增)

为了你的案子

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

定义为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(thirdobj, myobj);
thirdobj.mynum = 3;
alert(myobj.mynum);
您还可以使用:

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

简而言之

它不会,我也不知道你为什么期望它。1、2、2是它将产生的结果#3被分配给thirdobj,这与myobj不同,所以myobj仍然是2。@Aragorn这是错误的。它产生1、2、3和
thirdobj
绝对是与其他对象完全相同的对象:
thirdobh===myobj//true
@VLAZ-duh!,我错过了obj.assign上的错误,谢谢你指出。
let thirdobj = { ... myobj};
thirdobj.mynum = 3;
alert(myobj.mynum);