ES6 的Object.assign(target, source_1, ···)

居老師的狗子發表於2019-03-25

一、基本概念

Object.assign方法用來將源物件(source)的所有可列舉屬性,複製到目標物件(target)。它至少需要兩個物件作為引數,第一個引數是目標物件,後面的引數都是源物件。
Object.assign(target, source_1, ..., source_n)

二、基本用法

let target = {a: 1};
let object2 = {b: 2};
let object3 = {c: 3};
Object.assign(target,object2,object3);  
// 第一個引數是目標物件,後面的引數是源物件
target;  // {a: 1, b: 2, c: 3}

需要注意的是,

  • 如果目標物件和源物件有同名屬性,或者多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性。
  • 如果該函式只有一個引數,當引數為物件時,直接返回該物件;當引數不是物件時,會先將引數轉為物件然後返回。在這裡還有一點,null 和 undefined 不能轉化為物件,所以會丟擲TypeError錯
  • assign 的屬性拷貝是淺拷貝
Object.assign(null);       // TypeError: Cannot convert undefined or null to object
Object.assign(undefined);  // TypeError: Cannot convert undefined or null to object
當引數不止一個時,null 和 undefined 不放第一個,即不為目標物件時,會跳過 null 和 undefined ,不報錯
Object.assign(1,undefined);  // Number {1}
Object.assign({a: 1},null);  // {a: 1}
Object.assign(undefined,{a: 1});  // TypeError: Cannot convert undefined or null to object

 

相關文章