1、JSON与字符串的互转(俗称丐版)
newObj = JSON.parse(JSON.stringify(oldObj)
优点:
缺点:
- 性能问题,stringify再解析其实需要耗费较多时间,特别是数据量大的时候;
- 一些类型无法拷贝,例如
函数
(不输出),正则
(输出空对象),时间对象
(输出时间字符串),Undefiend
(不输出)等等问题。
2、Object.assign
var obj = {};
var o1 = { a: 1 };
var o2 = { b: 2 };
var obj = Object.assign(obj, o1, o2);
console.log(obj);
优点:
缺点:
- 对于一层对象来说是没有任何问题的,但是如果对象的属性对应的是其它的引用类型的话,还是只拷贝了引用,修改的话还是会有问题
3、递归深拷贝
function deepCopy(newObj, oldObj) {
newObj = newObj || {};
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) {
if (typeof oldObj[i] === 'object') {
newObj[i] = Array.isArray(oldObj[i]) ? [] : {};
deepCopy(newObj[i], oldObj[i]);
} else {
newObj[i] = oldObj[i];
}
}
}
return newObj;
}
优点:
缺点: