请用 JavaScript 手写一个与原生 JSON.stringify 行为一致的实现,并给出完整代码。
考察说明
考查对 JSON 序列化底层机制的理解以及递归处理、类型判断和边界情况的代码实现能力。
回答思路
- 【回答框架 1】核心是把输入值按类型递归序列化:先处理基本类型(字符串、数字、布尔、null),再处理对象和数组。对于函数、undefined、symbol,在对象属性值和数组中要区别对待。
- 【回答框架 2】字符串需要转义特殊字符如双引号、反斜杠、换行符等;数字要处理 Infinity、NaN 转为 null。
- 【回答框架 3】对象和数组需递归调用自身,并跳过值为函数或 undefined 的属性;数组中的 undefined、函数、symbol 序列化为 null。
- 【回答框架 4】要能处理 toJSON 方法,优先调用它获取可序列化的值。循环引用时需检测并抛出 TypeError。
- 【回答框架 5】实现时注意键的排序(一般按插入顺序)和缩进参数(可选)。
- 【关键点 1】必须递归处理嵌套对象与数组
- 【关键点 2】字符串转义与特殊数字处理
- 【关键点 3】toJSON 方法优先调用
- 【关键点 4】循环引用检测并报错