You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:27:25