深浅拷贝
浅拷贝:
当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变
因为浅拷贝拷贝的是引用的地址
深拷贝:
当一个数值拷贝另一个数值的时候,一个数值的发生改变另一个数值不会发生改变
浅拷贝:
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 }