提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是深拷贝、浅拷贝?
通俗一点来说,在对于引用类型数据进行拷贝操作时,有两种拷贝方式,其中:
深拷贝:拷贝目标数据后,源数据和目标数据指向的内存地址是独立的,执行拷贝后不论哪一方进行修改,都不会互相影响
浅拷贝:源数据和目标数据共用内存地址,修改后由于内存地址相同,所以指向同一个内存地址的变量值也会进行修改
二、深拷贝、浅拷贝常见方法
1.深拷贝
- JSON.parse(JSON.stringify(data))
注:不能用来深拷贝方法
不能拷贝Symbol类型数据
2.浅拷贝
-
直接‘=’赋值
-
使用Object.assign
针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是(可枚举)属性值。
假如源值是一个对象的引用,它仅仅会复制其引用值。
三、如何实现深拷贝
1.核心是通过递归实现
代码如下(示例):
deepClone(obj) {
let result;
if (typeof obj !== "object") {
result = obj;
return result;
} else {
result = Array.isArray(obj) ? [] : {};
for (let i in obj) {
if (obj[i] && typeof (obj[i] === "object")) {
result[i] = this.deepClone(obj[i]);
} else {
result[i] = obj[i];
}
}
return result;
}
},
2.ES6的数组新功能-from到底是深拷贝还是浅拷贝
从测试看感觉是浅拷贝
总结
以上就是今天要讲的深拷贝和浅拷贝相关的,才疏学浅,有不对的欢迎大家多交流