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" }
原文地址:https://www.cnblogs.com/changxue/p/8385894.html