json.parse(json.stringify(obj))能快速克隆,因其通过序列化转字符串再反序列化重建对象,天然生成全新深层独立副本;但仅适用于纯数据对象,不支持函数、date、undefined、循环引用等。

用 JSON.parse(JSON.stringify(obj)) 是最简快的方式,适合纯数据、无函数、无 Date、无 undefined、无循环引用的简单配置对象。
为什么这个方法能“快速克隆”?
它利用 JSON 的序列化与反序列化过程,把原对象“转成字符串再转回来”,天然生成一个全新、深层独立的对象,所有嵌套属性都会被复制,不是引用共享。
注意:这本质是“深拷贝”的一种取巧实现,不依赖外部库,一行代码搞定。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
适用场景:干净的配置对象
比如这种只含基本类型和普通嵌套对象/数组的配置:
const config = {
theme: 'dark',
timeout: 5000,
features: { search: true, export: false },
endpoints: ['api/v1/users', 'api/v1/posts']
};✅ 它不含:
- 函数(如 onSuccess() {})
- Date 实例(会变成字符串)
- RegExp、Map、Set、undefined(会被忽略)
- 循环引用(会报错)
- Symbol 键(会被丢弃)
怎么写才安全又简洁?
封装成一个可复用的小函数,加个简易校验更稳妥:
function cloneConfig(obj) {
if (obj === null || typeof obj !== 'object') return obj;
try {
return JSON.parse(JSON.stringify(obj));
} catch (e) {
throw new Error('无法克隆:对象包含不可序列化的值(如函数、Date、undefined 等)');
}
}
<p>// 使用
const newConfig = cloneConfig(config);</p>替代方案对比(简单场景下没必要)
• structuredClone():现代浏览器支持,能处理 Date、Map、Set、RegExp,但兼容性略差(不支持 IE 和旧版 Safari)
• Lodash _.cloneDeep():功能全,但引入依赖,对纯配置对象有点重
• 手写递归深拷贝:易出错,维护成本高,没必要
结论:只要确认你的配置是“JSON-safe”的,JSON.parse(JSON.stringify()) 就是最直接、轻量、有效的选择。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










