浅拷贝:只能拷贝最外部一层,深层的对象,依然是通过引用指向同一块堆内存。
简单实现
1 | function (obj) { |
Object.assign()—该方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象。
1 | let a = { |
扩展运算符
1 | let b = {...a}; |
Array.prototype.slice()—方法返回一个新的数组对象,这一对象由begin和end(不包括end)决定原数组的浅拷贝。原始数组不会被改变。相应的还有concat
操作不改变原数组
1 | let a = [0, "1", [2,3]]; |
深拷贝
JSON.parse(JSON.stringify(object))
1 | let a = [0, "1", [2, 3]]; |
深拷贝注意
代码实现
1 | var deepCopy = function(obj){ |
解决循环引用–设置一个哈希表存储已拷贝过的对象
1 | var deepCopy = function(obj, hash= new WeakMap()){ |
原文:https://www.cnblogs.com/lijianming180/p/12366224.html