js_Object.assign(对象的合并)

2021-01-17 11:15

阅读:758

标签:def   数据类型   复制   ade   报错   sig   abc   形式   symbol   

目录
  • 定义
  • 同名属性会相互覆盖,源对象后传入的会覆盖先传入的同名属性
  • 接收非对象作为参数时,进行对象转换
  • 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的对象,所以发生了同名属性值的替换。

js_Object.assign(对象的合并)

标签:def   数据类型   复制   ade   报错   sig   abc   形式   symbol   

原文地址:https://www.cnblogs.com/Syinho/p/13365553.html


评论


亲,登录后才可以留言!