JavaScript 中 JSON.stringify 的第二个参数,90% 的人没用过
2025-04-01
JSON.stringify(obj) 谁都会;加两个参数就能控制「输出哪些键」和「缩进几格」。日志脱敏、接口 mock、本地持久化都用得上。
replacer:数组 = 白名单
第二参数传 string 数组时,只序列化列出的键(顶层;嵌套对象仍递归全部键,除非也是 replacer 函数)。
JSON.stringify(user, ["id", "name"]); // 只含 id、namereplacer:函数 = 自定义过滤
function(key, value) 可跳过 undefined、脱敏 password、把 Date 转成时间戳。
返回 undefined 表示从输出中 omit 该属性(数组里会变成 null 占位规则需注意)。
JSON.stringify(obj, (k, v) => k === "password" ? undefined : v);space:可读缩进
第三参数传数字 1–10 或字符串(如 '\t')生成 pretty JSON;传 undefined 得紧凑一行。
生产日志通常省略 space;调试与 fixture 生成常用 2。
toJSON 钩子
对象上的 toJSON() 在 stringify 时被调用;Date 内置 toJSON 输出 ISO 字符串。
自定义 class 可在此控制序列化形状,避免循环引用字段。