1. 程式人生 > 實用技巧 >js_Object.assign(物件的合併)

js_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的物件,所以發生了同名屬性值的替換。