深浅拷贝

浅拷贝:
当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变
因为浅拷贝拷贝的是引用的地址
深拷贝:
当一个数值拷贝另一个数值的时候,一个数值的发生改变另一个数值不会发生改变
浅拷贝:
let a = {
    age: 1
}
let b = a
a.age = 2
console.log(b.age) // 2

1、通过 Object.assign 来解决这个问题。

let a = {
    age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1

2、也可以通过展开运算符(…)来解决

let a = {
    age: 1
}
let b = {...a}
a.age = 2
console.log(b.age) // 1

通常浅拷贝就能解决大部分问题了,但是当我们遇到如下情况就需要使用到深拷贝了

let a = {
    age: 1,
    jobs: {
        first: 'FE'
    }
}
let b = {...a}
a.jobs.first = 'native'
console.log(b.jobs.first) // native

深拷贝

这个问题通常可以通过 JSON.parse(JSON.stringify(object)) 来解决。

let a = {
    age: 1,
    jobs: {
        first: 'FE'
    }
}
let b = JSON.parse(JSON.stringify(a))
a.jobs.first = 'native'
console.log(b.jobs.first) // FE
$.extend()
除了可以给jquery对象扩展方法外还可以实现深浅拷贝
  布尔值 如果填true的情况下是深考贝 什么也不写就是浅拷贝
var obj = {a:{name:"aa",age:19}};
var obj1 = {b:{name:"bb",age:19}};

var obj2 = $.extend({},obj,obj1)
obj2.a.name="cc";
console.log(obj2) 
    // a: { name: "cc", age: 19 } b: { name: "bb", age: 19 } __proto__: Object

console.log(obj)
    // a: { name: "cc", age: 19 }
原文地址:https://www.cnblogs.com/houjl/p/10081313.html