天天看点

Object.assign()和$.extend( target [, object1 ] [, objectN ] )

一、

$.extend( target [, object1 ] [, objectN ] )

$.extend( [deep ], target, object1 [, objectN ]

var object1 = {
        apple: 0,
        banana: {weight: 52, price: 100},
        cherry: 97
    };
var object2 = {
        banana: {price: 200},
        durian: 100
    };
    /* object2 合并到 object1 中 */
    $.extend(object1, object2); //默认浅拷贝
	$.extend(true,object1,object2); //深拷贝
           

参考前面一篇博客:

https://blog.csdn.net/weixin_39407291/article/details/88235144

二、Object.assign(target, …sources)

参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

浅拷贝

//直接复制简单对象
  const obj = { a: 1 };
  const copy = Object.assign({}, obj);
  console.log(copy); // { a: 1 }
  
 //直接复制属性值是对象的对象
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}} 
可以看出属性值是对象的时候,用Object.assign(),简单复制对象,改变新对象的属性值,原对象也会跟着一起改变。
// 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}}
使用JSON.pase( JSON.stringify(obj) ),原对象和新对象的属性值改变是独立的。
           

继续阅读