JSON.stringify在处理Set类型时会出现静默丢弃现象,导致序列化结果变为空对象。本文将深入解析这一特性,并提供有效的解决方案。
JSON.stringify方法仅能处理标准的可枚举属性,支持的数据类型包括基本类型、数组和普通对象。由于Set是特殊对象,其内部数据存储在[[Entries]]隐藏属性中,不属于可枚举属性范围。
实际测试时会发现:
console.log(JSON.stringify(new Set())); // "{}" console.log(JSON.stringify(new Set([1, 2]))); // "{}"无论Set是否包含元素,序列化结果都是空对象,因为JSON.stringify无法获取到Set内部的元素信息。
类似Map、Date、RegExp等特殊类型同样存在JSON.stringify处理问题:
JSON.stringify(new Map()) // "{}" JSON.stringify(new Date()) // "2026-05-07T03:58:00.000Z" JSON.stringify(/abc/) // "{}" JSON.stringify(BigInt(123)) // 报错正确处理这些特殊类型的序列化问题,需要了解其特性并采用针对性的解决方案。掌握这些技巧将有效避免开发过程中的潜在陷阱。