js深拷贝symbol类型的数据
时间: 2023-02-07 08:55:57 浏览: 121
在 JavaScript 中,我们可以使用 `JSON.parse(JSON.stringify(obj))` 来实现对象的深拷贝。然而,这种方法并不能拷贝 Symbol 类型的数据。
要深拷贝 Symbol 类型的数据,我们可以使用递归函数来实现。例如:
```
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Symbol) {
return Symbol(obj.description);
}
if (obj instanceof Date) {
return new Date(obj);
}
if (obj instanceof RegExp) {
return new RegExp(obj);
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
```
这个函数使用了递归来处理对象的属性。如果属性的值是对象,则继续递归拷贝;如果是基本数据类型,则直接返回。
使用方法:
```
let obj = {a: 1, b: Symbol('symbol')};
let copy = deepCopy(obj);
```
这样,`copy.b` 就是一个拷贝的 Symbol,与原来的 `obj.b` 完全独立。
阅读全文