js深拷贝
应用场景
1、JavaScript中,Object是引用类型,把对象A赋值给B之后,改变B的值,A会跟着改变。这是因为默认执行浅拷贝,也就是在内存中只复制了一个指针给了B,内存中的数据本身并没有被复制。
- 方法一
const clone = {...original}
实例
//这种方式只能用于单层json对象,也就是对象中的每个value都是基本类型,没有嵌套。
let A = {name: zhangsan}
let B = {...A}
b.name= lisi
console.log(a) // {name: zhangsan}
- 方法二
const clone = Object.assign({}, original)
实例
var A = { name: zhangsan };
var B = Object.assign({}, A);
B.A -= name = lisi
console.log(A) // {name: lisi}
- 方法三
//这个是可以对多层json对象进行拷贝的
let B = JSON.parse(JSON.stringify(A));
实例:(复制数组)
//用json.parse和json.stringify复制一个新的数组
jsonTransfer(obList){
let tempOb = null;
if(typeof (obList) == 'object') {//为数组类型先stringify再parse
tempOb = JSON.parse(JSON.stringify(obList));
} else if(typeof (obList) == 'string') { //为json格式时直接parse转
tempOb = JSON.parse(obList);
}
return tempOb;
},
addNewData(index, row) {
let data = [{name: '张三', age: 18},{name: '李四', age: 90}];
this.temp1 = this.jsonTransfer(data);//[{name: '张三', age: 18},{name: '李四', age: 90}];
this.temp2 = this.jsonTransfer(data);//[{name: '张三', age: 18},{name: '李四', age: 90}];
this.temp1 = [{name: '王五', age: 12}];
//this.temp2的值是[{name: '张三', age: 18},{name: '李四', age: 90}];
}