深层拷贝与浅层拷贝
1.区别:
值类型:布尔类型,字符串,整型。
引用类型: 数组,集合,对象。
值类型保存在栈中,而引用类型需要在栈中通过引用地址在堆中找到值。
2.浅层拷贝
例如:
var a ={{m:1}, {n:2},3}
var b=a.slice();
console.log(a===b); //false
a[0].m = 4;
console.log(b[0].m)//4,说明拷贝的是元素的引用
a[2] = 5;
console.log(b[2])//3,说明拷贝的实例,(拷贝的a上面的3)
3.深层拷贝
1.seven2 = JSON.parse(JSON.stringify(seven1));
2.$.extend( [deep ], target, source)
例如:
var a = [{m:1}, {n:2},3];
var b =[];
$.extend(true,b,a); //true 表示深层copy,false 指的浅层
console.log(a === b);// false
a[0].m = 4;
console.log(b[0].m)//1
a[2] = 5;
console.log(b[2])//3
3.Object.assigbn(target,source) 把source深层copy给target
例如:
var a = [{m:1}, {n:2},3];
var b =[];
var c=[];
//jquery.extend(true,b,a);
Object.assign(b,a) //深层copy对象
console.log(a === b);// false
c=a; //复制引用地址
console.log(c==a); //true