javascript 中深度克隆数组并保持对象、日期等内置类型完整性的最佳实践
在 JavaScript 开发中,浅层克隆(如扩展运算符 [...arr]、slice() 或 Array.from())仅复制数组第一层引用,对嵌套的对象、日期、正则等仍共享内存地址——修改副本中的深层属性会意外影响原数组。而 JSON.parse(JSON.stringify()) 虽能实现深度克隆,却会丢失类型信息(如 Date 变为字符串、undefined/Function/Symbol 被忽略),无法满足“完全一致 + 新引用”的核心需求。
此时,推荐使用现代浏览器及 Node.js(v17.0+)原生支持的 structuredClone() API:
const a = [1, new Date('2025-07-19T10:35:21Z'), false, {
date: new Date('2025-07-19T10:35:21Z'),
name: "John Doe"
}];
const b = structuredClone(a);
consol
e.log(a === b); // false → 全新数组引用
console.log(a[1] === b[1]); // false → Date 实例也被独立克隆
console.log(a[3] === b[3]); // false → 嵌套对象亦为深拷贝
// 修改副本不影响原数组
b[3].date = null;
console.log(a[3].date instanceof Date); // true → 原对象 Date 类型完好
console.log(b[3].date); // null✅ 优势总结:
⚠️ 注意事项:
综上,对于绝大多数现代项目,structuredClone() 是克隆含复杂嵌套结构数组的首选、标准、零配置解决方案——它真正实现了“内容相同、引用隔离、类型保真”的深度克隆目标。