一、Object.assign()
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); // expected output: Object { a: 1, b: 4, c: 5 }
如果目標對象中的屬性具有相同的鍵,則屬性將被源對象中的屬性覆蓋。后面的源對象的屬性將類似地覆蓋前面的源對象的屬性。支持多個對象合並,如果不想修改目標對象,可以將目標對象改成空 {},
例如:const returnedTarget = Object.assign( {} , source,source);
Object.assign
方法只會拷貝源對象自身的並且可枚舉的屬性到目標對象。該方法使用源對象的[[Get]]
和目標對象的[[Set]]
,所以它會調用相關 getter 和 setter。因此,它分配屬性,而不僅僅是復制或定義新的屬性。如果合並源包含getter,這可能使其不適合將新屬性合並到原型中。為了將屬性定義(包括其可枚舉性)復制到原型,應使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。
在出現錯誤的情況下,例如,如果屬性不可寫,會引發TypeError
,如果在引發錯誤之前添加了任何屬性,則可以更改target
對象。
注意,Object.assign
不會在那些source
對象值為 null
或 undefined
的時候拋出錯誤。
二、采用循環遍歷
這種就稍微麻煩一點了
var obj1 = {name:'張三'}; var obj2 = {age:18}; for (var key in obj2) { if (obj2.hasOwnProperty(key) === true){ // 確保不是 obj2 的原型屬性 obj1[key] = obj2[key]; } } console.log(obj1);