2017-04-12 109 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}