JSON(JavaScript Object Notation)本质是「文本」:跨语言、可读、可网络传输。几乎全站的接口通信(fetch 请求与响应)与本地持久化用的都是它。JS 提供 JSON.stringify(对象 → 文本)与 JSON.parse(文本 → 对象)两个核心方法。
序列化的世界并不等价于 JS 的世界:undefined、函数、Symbol 键/值会被忽略;Date 序列化成 ISO 字符串、正则变成空对象、循环引用直接抛错。理解这些差异能少踩一半「存进去取出来变了」的坑;需要传输函数或日期时,传输前自行转换。
const u = { name: 'x', age: 3, born: new Date(), say: () => 1 }; JSON.stringify(u); // {"name":"x","age":3,"born":"2026-10-31T00:00:00.000Z"} —— say 丢失 // reviver 把字符串日期「复活」 const rev = JSON.parse(text, (k, v) => k === 'born' && typeof v === 'string' ? new Date(v) : v); // 美化输出(第二个参数是 replacer,null 表示不过滤) JSON.stringify({ a: 1 }, null, 2); // 安全解析:先判字符串再 parse,避免 throw 中断逻辑 function safeParse(s, fallback = null) { try { return JSON.parse(s); } catch { return fallback; } }