参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Oject.assign()
方法将源对象上的属性拷贝到目标对象,最后返回目标对象。
语法
Object.assign(target, ...sources);
特点: 浅拷贝,只是数据的引用(浅拷贝拷贝的是栈空间内存地址,并不是拷贝的内容)
function test() {
'use strict';
let obj1 = { a: 0 , b: { c: 0}};
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj1.a = 1;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj2.a = 2;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
obj2.b.c = 3;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
// Deep Clone
obj1 = { a: 0 , b: { c: 0}};
let obj3 = JSON.parse(JSON.stringify(obj1));
obj1.a = 4;
obj1.b.c = 4;
console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
}
test();
对于相同属性的数据,后面的数据会覆盖前面的数据,比如数组,对象
// 对象
var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 } ,b改变为2,c改变为3
// 数组
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var arr= Object.assign({}, arr1, arr2);
console.log(arr); // { '0': 4, '1': 5, '2': 6 } 会隐式转化为对象
网友评论