如何使JSON.stringify将自定义对象转换为原始数据类型?
让JSON.stringify将自定义对象转为原始类型的方法
默认情况下,JSON.stringify会序列化对象的所有可枚举属性,所以你的Bar实例会被转为{name: 'bar'}。重写toString或valueOf方法无效,因为**JSON.stringify不会调用这两个方法**,它优先识别对象的toJSON方法——这个方法的返回值才会被用于序列化。
解决方案:添加toJSON方法
给Bar的原型添加toJSON方法,直接返回你想要的原始值(即实例的name属性):
class Bar { constructor() { this.name = 'bar'; } toJSON() { return this.name; } } const obj = {foo: new Bar}; console.log(JSON.stringify(obj)); // 输出: {"foo":"bar"}
为什么toString/valueOf不生效?
toString和valueOf是JavaScript中用于隐式类型转换的方法(比如当对象被用于字符串拼接、数学运算时),但JSON.stringify的序列化逻辑不依赖这些转换,它只会检查目标对象是否有toJSON方法:如果有,就用该方法的返回值进行后续序列化;如果没有,才会遍历对象的可枚举属性。
内容的提问来源于stack exchange,提问作者Slev7n
相关产品推荐
相关产品推荐

