js 中的深拷贝和浅拷贝
之前经常有被问到深拷贝和浅拷贝,但是一直有些模糊,所以在这里简单的写一下笔记,以便以后查阅
浅拷贝
let arr = [1,3,4,{
username: 'hjc'
}];
let arr1 = arr; //浅拷贝
arr1.push(7); //只对 arr1 做 push 操作
arr[3].username = 'wu'; //只修改 arr 中的 username
console.log(arr,arr1);
得到的结果是:
因为数组对象是一个引用类型,实际上浅拷贝只是复制了指针指向,但还是指向同一个地址,因此修改一个会引起另一个的改变
深拷贝
在这里使用了JSON.stringigy
和JSON.parse
的方法来创建一个一模一样的新对象,这样对其中一个对象进行操作,也不会影响到另一个对象
let arr = [1,3,4,{
username: 'hjc'
}];
let arr1 = JSON.stringify(arr); //arr1 为 arr 的字符串形式
arr1 = JSON.parse(arr1); //将 arr1 重新解析为 json,以此获取到一个新的对象空间
arr1.push(7); //只对 arr1 做 push 操作
arr[3].username = 'wu'; //只修改 arr 中的 username
console.log(arr1, arr);