方法之一:运行时提供的原生方法
use::structuredClone
方法之一: 转json再转回对象
JSON.parse(JSON.stringify(待拷贝的对象))
1. 适用范围:
1.1. 优点:
- 深层拷贝
1.2. 缺点:
- 取不到值为 undefined 的 key
- 如果对象里有函数,函数无法被拷贝下来
- 无法拷贝copyObj对象原型链上的属性和方法
- 对象转变为 date 字符串。
方法之一: 自己实现函数,递归克隆
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
// 支持 Map 和 Set 作为源类型
if (obj instanceof Map) {
const copy = new Map();
for (const [key, value] of obj) {
copy.set(key, deepClone(value));
}
return copy;
}
if (obj instanceof Set) {
const copy = new Set();
for (const value of obj) {
copy.add(deepClone(value));
}
return copy;
}
// 支持数组和普通对象
const copy = Array.isArray(obj) ? [] : {};
for (const key of Object.keys(obj)) {
copy[key] = deepClone(obj[key]);
}
return copy;
}
// 示例对象
const original = { a: 1, b: { c: 2 }, d: [3, 4, { e: 5 }] };
// 深拷贝
const deepCopy = deepClone(original);
console.log(deepCopy);
console.log(deepCopy.b === original.b); // false, 表示成功深拷贝
console.log(deepCopy.d === original.d); // false, 表示成功深拷贝
方法之一: 利用第三方库lodsh
_.cloneDeep()
方法之一: 利用第三方库jQuery
jQuery.extend()