js怎么深度拷贝,
时间: 2023-12-14 11:36:43 浏览: 53
在 JavaScript 中,可以使用两种方法进行深度拷贝:递归和 JSON 序列化。
1. 递归方法:
递归方法是通过遍历对象的属性来创建一个新的对象,同时对于对象的每个属性,如果它是一个对象,则递归调用该方法。
示例代码:
```
function deepCopy(obj) {
var copy;
if (null == obj || "object" != typeof obj) return obj;
if (obj instanceof Date) {
copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
if (obj instanceof Array) {
copy = [];
for (var i = 0, len = obj.length; i < len; i++) {
copy[i] = deepCopy(obj[i]);
}
return copy;
}
if (obj instanceof Object) {
copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = deepCopy(obj[attr]);
}
return copy;
}
throw new Error("Unable to copy obj! Its type isn't supported.");
}
```
2. JSON 序列化方法:
JSON 序列化方法是将对象转换为字符串,然后再将字符串解析为新的对象。这种方法比递归方法快速,但是它无法拷贝对象中的函数和正则表达式。
示例代码:
```
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
```
需要注意的是,在使用 JSON 序列化时,如果对象中包含了函数和正则表达式等特殊类型,会丢失这些信息。
阅读全文