对象浅拷贝
Object.assign()
将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象(存在兼容问题)
var newObj = Object.assign({}, obj)
for in
var newObj = {}
for (var i in obj) {
newObj[i] = obj[i]
}
...
运算符
var newObj= { ...obj }
数组浅拷贝
Array.from()
var newArr = Array.from(arr)
Array.prototype.concat()
var newArr= [].concat(arr)
Array.prototype.slice()
var newArr= arr.slice(0)
深拷贝
JSON.parse()
和JSON.stringify()
undefined , function, RegExp 等类型不能拷贝
var newObj = JSON.parse( JSON.stringify(obj) )
- 递归算法
function deepClone(obj) {
if (obj === null) return null;
if (obj instanceof RegExp) return new RegExp(obj);
if (obj instanceof Date) return new Date(obj);
if (typeof obj !== 'object') {
return obj;
}
let t = new obj.constructor();
for (let key in obj) {
t[key] = deepClone(obj[key]);
}
return t;
}