天天看點

Object.assign

今天撸代碼看到大佬寫的代碼了有句‘ Object.assign(param,_param);’不明白什麼意思,遂百度之:

Object.assign()

 方法用于将所有可枚舉屬性的值從一個或多個源對象複制到目标對象。它将傳回目标對象。

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

const object2 = Object.assign({c: 4, d: 5}, object1);

console.log(object2.c, object2.d);
// 輸出結果: 3 5
           

Object.assign()接口可以接收多個參數,第一個參數是目标對象,後面的都是源對象,assign方法将多個原對象的屬性和方法都合并到了目标對象上面,如果在這個過程中出現同名的屬性(方法),後合并的屬性(方法)會覆寫之前的同名屬性(方法)。

var target1  = {a : 1}; //目标對象
var source1 = {b : 2}; //源對象1
var source2 = {c : 3}; //源對象2
var source3 = {c : 4}; //源對象3,和source2中的對象有同名屬性c
Object.assign(target1,source1,source2,source3);
const object2 = Object.assign({c: 4, d: 5}, target1);

console.log('object2====>',object2)
//輸出結果: object2====> {c: 4, d: 5, a: 1, b: 2}
           

assign的設計目的是用于合并接口的,是以它接收的第一個參數(目标)應該是對象,如果不是對象的話,它會在内部轉換成對象,是以如果碰到了null或者undefined這種不能轉換成對象的值的話,assign就會報錯。但是如果源對象的參數位置,接收到了無法轉換為對象的參數的話,會忽略這個源對象參數。

const v1 = 'abc';
const v2 = true;
const v3 = 10;
		 
const obj = Object.assign({}, v1, v2, v3);
console.log('obj====>',obj)
//輸出結果:{0: "a", 1: "b", 2: "c"}
           

查閱更多:傳送門1,傳送門2