在JavaScript中,你可以使用Object.assign()方法或者使用Spread Operator (…) 來合并對象。
Object.assign()
Object.assign() 靜態方法將一個或者多個源對象中所有可枚舉的自有屬性復制到目標對象,并返回修改后的目標對象。
語法
Object.assign(target, ...sources)
參數
-
target:需要應用源對象屬性的目標對象,修改后將作為返回值。
-
sources:一個或多個包含要應用的屬性的源對象。
示例
let name = { name:'sea' },age = { age:15 },person= {}Object.assign(person,name,age)console.log(person)
//{ name:'sea',age:15 }
在這個例子中,Object.assign()方法創建了一個新的對象,其屬性是所有傳入對象的屬性的拷貝。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };const returnedTarget = Object.assign(target, source);console.log(target);
// Expected output: Object { a: 1, b: 4, c: 5 }console.log(returnedTarget === target);
// Expected output: true
如果目標對象與源對象具有相同的鍵(屬性名),則目標對象中的屬性將被源對象中的屬性覆蓋,后面的源對象的屬性將類似地覆蓋前面的源對象的同名屬性。
展開語法Spread Operator (…)
淺拷貝 (Shallow-cloning,不包含 prototype) 和對象合并,可以使用更簡短的展開語法。而不必再使用 Object.assign() 方式。
Spread運算符也可以用來合并對象。它可以將一個數組或對象展開到一個函數或數組中。
let name = { name:'sea' },age = { age:15 }let person = { ...name,...age }console.log(person)
//{ name:'sea',age:15 }
在這個例子中,Spread Operator (…) 用于擴展對象,所以它復制了所有對象的屬性到新的對象中。
var obj1 = { foo: "bar", x: 42 };
var obj2 = { foo: "baz", y: 13 };var clonedObj = { ...obj1 };
// 克隆后的對象:{ foo: "bar", x: 42 }var mergedObj = { ...obj1, ...obj2 };
// 合并后的對象:{ foo: "baz", x: 42, y: 13 }
區別
- Object.assign() 函數會觸發 setters,而展開語法則不會。