JSON.stringify()可将前端配置对象转为JSON字符串,支持基础类型、自动忽略undefined/函数,但遇循环引用报错;可通过replacer定制序列化逻辑,用space参数美化输出,需注意NaN/Infinity转null及中文编码等兼容性问题。

直接用 JSON.stringify() 就可以将前端配置对象转成 JSON 字符串。
基础用法:直接序列化普通对象
只要对象是纯数据(不包含函数、undefined、Symbol、Date 实例、RegExp 等),调用 JSON.stringify(config) 即可:
- 支持对象、数组、字符串、数字、布尔值、null
- 会自动忽略对象中的
undefined和函数属性 - 遇到循环引用会报错:
TypeError: Converting circular structure to JSON
处理特殊值:日期、undefined、自定义格式
如果配置里有 Date 对象,它默认会被转成 ISO 字符串(如 "2024-05-20T10:30:00.000Z");但若想统一格式或保留时间戳,可用第二个参数 replacer:
- 传入函数:对每个键值做定制处理,比如把
Date转为毫秒数 - 传入数组:指定只保留哪些字段(白名单)
- 示例:
JSON.stringify(config, (key, val) => val instanceof Date ? val.getTime() : val)
美化输出与空格缩进
开发调试时,加第三个参数让 JSON 更易读:
立即学习“Java免费学习笔记(深入)”;
-
JSON.stringify(config, null, 2)→ 每级缩进 2 个空格 -
JSON.stringify(config, null, ' ')→ 用制表符缩进 - 注意:生产环境一般不用缩进,避免增大传输体积
规避常见坑
实际项目中容易出问题的点:
- 对象含
undefined属性 → 序列化后该字段消失(不是变成null) - 含
NaN或Infinity→ 被转为null - 含循环引用 → 必须提前检测或用第三方库(如
flatted)处理 - 中文字符默认不转义 → 如需兼容旧环境,可加
JSON.stringify(config, null, 0).replace(/[u007f-uffff]/g, c => '\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4))


















