JSON.stringify 的 space 参数仅提升调试可读性,不参与深拷贝;传入数字(如2)或字符串(如"→ ")可生成缩进结构快照,配合 console.group 与引用隔离测试,能高效验证深拷贝正确性。

JSON.stringify 的缩进参数(space)本身不参与深拷贝逻辑,但它能极大提升调试时原始数据结构的可读性——尤其在检查深拷贝结果是否与源结构一致时,清晰的缩进层级就是结构图的视觉骨架。
用 space 生成带缩进的结构快照
直接传入数字(如 2)或字符串(如 " ")作为第三个参数,让输出自动换行并缩进:
-
数字值:表示每个层级缩进的空格数,例如
JSON.stringify(obj, null, 2)会用两个空格对齐嵌套对象和数组; -
字符串值:更灵活,比如传
" "或"→ ",后者甚至能可视化层级走向; - 注意 null/undefined/函数/Date/Symbol 等不可序列化值会被自动过滤,这反而是快速识别“非标准字段”的线索。
对比源与拷贝:结构图即校验依据
深拷贝后,分别对原对象和拷贝结果调用带缩进的 stringify,肉眼比对输出即可发现结构性差异:
- 如果某层缩进突然错位、某对象变成空对象
{}、某数组变为空数组[],说明该路径上可能发生了浅拷贝或丢失; - 若某字段完全消失,大概率是它属于不可序列化类型(如函数),提示你需手动处理这类特殊值;
- 配合
console.group()分组打印,能让结构图更聚焦:
console.group('原始结构'); console.log(JSON.stringify(src, null, 2)); console.groupEnd();<br> console.group('深拷贝结果'); console.log(JSON.stringify(copy, null, 2)); console.groupEnd();
避开常见陷阱:缩进不是万能的
缩进美化的是 JSON 文本,不是运行时对象结构。要真正验证深拷贝有效性,还需补充判断:
-
引用隔离测试:修改拷贝对象的深层属性(如
copy.user.profile.name = "test"),确认原对象对应路径未变化; -
循环引用会报错,此时
JSON.stringify直接抛出TypeError,提醒你当前结构含环,需改用支持循环引用的深拷贝方案(如 structuredClone 或自定义遍历); - 日期、正则、Map/Set 等原生对象会被转成空对象或字符串,仅靠缩进输出无法还原真实类型,需额外类型检查。
小技巧:封装一个调试友好的打印函数
把常用逻辑收拢,避免每次重复写参数:
const debugPrint = (obj, label = 'data') => {<br> console.group(label);<br> console.log(JSON.stringify(obj, null, 2));<br> console.groupEnd();<br>};- 进一步可加入类型提示:
console.info(`%c${label} (typeof: ${typeof obj})`, 'font-weight:bold;color:#5a67d8'); - 在关键节点调用:
debugPrint(original, '原始'); debugPrint(cloned, '拷贝后');


















