• ES6 对象的扩展 Object.assign()


    1.用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)
      Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。
      
    const target = { a: 1 };
    const source1 = { b: 2 };
    const source2 = { c: 3 };
    Object.assign(target, source1, source2);
    console.log(target) //{a: 1, b: 2, c: 3}
    2.如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
    const target = { a: 1, b: 1 };
    const source1 = { b: 2, c: 2 };
    const source2 = { c: 3 };
    Object.assign(target, source1, source2);
    console.log(target) //{a: 1, b: 2, c: 3}
    
    //Object.assign数组处理
    var obj = Object.assign([1, 2, 3], [4, 5]);
    console.log(obj); //[4, 5, 3]
    //由于数组当做对象来处理所以值出现覆盖
    3.Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
    const obj1 = {a: {b: 1}};
    const obj2 = Object.assign({}, obj1);
    obj1.a.b = 2;
    console.log(obj2);  //{a:{b:2}}
    4.Object.assign方法只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
    const source = {
        get test() { return 1 }
    };
    const target = {};
    Object.assign(target, source)
    console.log(target); //{test: 1}
    5.常见用途
    (1)为对象添加属性或方法或合并多个对象或为属性指定默认值
    var default_var = { test:0 }
        var obj = {b:1}
        var test = Object.assign(obj,default_var,{
            test:"1",
            func1:function(){
                console.log(1)
            },
            func2:function(){
                console.log(1)
             }
          })
    console.log(test)            
    (2)克隆对象
    function clone(origin) {
        let originProto = Object.getPrototypeOf(origin);
        return Object.assign(Object.create(originProto), origin);
    }
    6.Object.assign方法参数相关
    const obj = {a: 1};
    Object.assign(obj) === obj // true
    
    typeof Object.assign(2) // "object"
    
    Object.assign(undefined) // 报错
    Object.assign(null) // 报错
    
    let obj = {a: 1};
    Object.assign(obj, undefined) === obj // true  undefined会被忽略
    Object.assign(obj, null) === obj // true  undefined会被忽略
    
    const v1 = 'abc';
    const v2 = true;
    const v3 = 10;
    const obj = Object.assign({}, v1, v2, v3);
    console.log(obj); // { "0": "a", "1": "b", "2": "c" }
  • 相关阅读:
    「题解」:07.16NOIP模拟T1:礼物
    「题解」:07.16NOIP模拟T2:通讯
    「题解」:图论专题总结
    07.07NOIP模拟赛
    [复习]平衡树splay
    「题解」:[组合数学][DP]:地精部落
    「题解」:[组合数学]:Perm 排列计数
    「题解」:[组合数学]:排队
    dp 杂题
    插头 dp 总结
  • 原文地址:https://www.cnblogs.com/changxue/p/8385894.html
Copyright © 2020-2023  润新知