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" }

浙公网安备 33010602011771号