js_Object.assign(物件的合併)
阿新 • • 發佈:2020-07-23
目錄
- 定義
- 同名屬性會相互覆蓋,源物件後傳入的會覆蓋先傳入的同名屬性
- 接收非物件作為引數時,進行物件轉換
- undefined與null無法轉換成物件,以它們作為引數會報錯
- 其它型別資料作為source,除了字串會以陣列形式傳入,其它資料均無效果
- 屬性名為Symbol值得屬性也同樣會被拷貝
- Object.assign執行的是淺拷貝
- 對陣列的處理
定義
object.assign
用於物件的合併,將源物件(source)的所有可列舉屬性複製到目標物件(target)中
let targetObj = { a: 1 }; let sourceObj1 = { b: 2 }; let sourceObj2 = { c: 3 }; Object.assign(targetObj, sourceObj1, sourceObj2); console.log(targetObj); //a: 1 b: 2 c: 3
同名屬性會相互覆蓋,源物件後傳入的會覆蓋先傳入的同名屬性
let targetObj = {
a: 1
};
let sourceObj1 = {
a: 2
};
let sourceObj2 = {
a: 3
};
Object.assign(targetObj, sourceObj1, sourceObj2);
console.log(targetObj); //a: 3
接收非物件作為引數時,進行物件轉換
console.log(typeof Object.assign(2));//object
undefined與null無法轉換成物件,以它們作為引數會報錯
- 將這兩種資料型別作為target會報錯,但是作為source不會報錯
其它型別資料作為source,除了字串會以陣列形式傳入,其它資料均無效果
let v1 = 'abc'; let v2 = 25; let v3 = true; let newObj = Object.assign({}, v1, v2, v3); console.log(newObj); //0: "a" 1: "b" 2: "c"
屬性名為Symbol值得屬性也同樣會被拷貝
Object.assign執行的是淺拷貝
對陣列的處理
var arr1 = [1, 2, 3];
var arr2 = [4, 5];
Object.assign(arr1, arr2);
console.log(arr1); //0:4 1:5 2:3
這裡將陣列視為了屬性名為0,1,2的物件,所以發生了同名屬性值的替換。