2017-04-12 68 views
2

我试图用Object.assign()“合并”两个对象,但不知何故原始对象被覆盖。见例如:Object.assign覆盖原始引用?

var x = {x:1}; 
 
var y = {y:2}; 
 

 
var z = Object.assign(x, y); 
 

 
// what I've expected 
 
console.log(z); // {"x": 1, "y": 2} 
 

 
// what I haven't expected 
 
console.log(x); // {"x": 1, "y": 2}

+5

那是因为你没有提供一个新的对象合并到'Object.assign({},X,Y);.'在这里阅读更多:HTTPS ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign – evolutionxbox

+1

Aww男人,我怎么能忽略这个......谢谢你们:) – ppasler

+0

第一件事应该是去那么文档应该到达这里。 _当然,如果文档没有意义_;) – Jai

回答

2

一个空的对象必须为Object.assign为新的合并对象的第一个参数被创建来提供。

var x = { 
 
    x: 1 
 
}; 
 
var y = { 
 
    y: 2 
 
}; 
 

 
var z = Object.assign({}, x, y); 
 

 
// new object 
 
console.log(z); // {"x": 1, "y": 2} 
 

 
// still the same 
 
console.log(x); // {"x": 1} 
 
console.log(y); // {"y": 2}

You can read more information about Object.assign here.

1

传递一个空{}assign()作为第一参数。

var x = {x:1}; 
 
var y = {y:2}; 
 

 
var z = Object.assign({},x, y); 
 

 
console.log(z); // {"x": 1, "y": 2} 
 

 
console.log(x); // {"x": 1}