其实用JSON.stringfy()和JSON.parse()就可以。
var copy = JSON.parse(JSON.stringify(对象名))
但是这种简单粗暴的方法有其局限性。当值为undefined、function、symbol 会在转换过程中被忽略。。。所以,对象值有这三种的话用这种方法会导致属性丢失。
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝
JSON.stringify与JSON.parse除了实现深拷贝,还能结合localStorage实现对象数组存储
为了防止这些问题,写了函数处理这些条件
function deepCopy(obj) {
var result = Array.isArray(obj) ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === ‘object’) {
result[key] = deepCopy(obj[key]); //递归复制
} else {
result[key] = obj[key];
}
}
}
return result;
}
一些Object.assgin(), 数组的slice()这些方法,只复制了基本类型数据类型,不是真正意义的深复制