JavaScript 为对象指定新的JSON序列化行为

本文探讨了如何通过实现JavaScript对象的toJSON方法来优化JSON序列化过程,特别是针对日期对象的序列化问题。文章解释了toJSON方法的工作原理,并提供了一个简单的示例来展示如何正确地使用它。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在很多情况下,我们并不希望,JavaScript JSON 序列化对象时 暴露当前的“工作模型”or“领域模型”某些成员或字段时,我们可能会大费周章的手动序列化,除此 JavaScript Date 日期时间类型的序列化,在默认情况下是未经历过 Iso 日期格式化的,所以序列化后的时间服务器并不能正确的序列化。

      现在,我们希望可以更加友好快速的解决这些问题,那么我们可以通过 ECMAScript 5.0 定义的 JavaScript To JSON 序列化定义规范的即可。

    在 ECMAScript 5.0 中 当一个 JavaScript 对象被序列化时,JSON 序列化引擎,首先会测量此“对象”是否存在“toJSON”属性,同时“toJSON”属性是否是一个“function”,若成功则 JSON 序列化引擎会将当前对象的序列化处理,交付于“此对象的 toJSON 函数“。

      例:

var foo = new Object({});
foo.toJSON = function () {
    return 'this a foo';
}

    但 toJSON 只返回允许基础的类型,返回”function“的类型是绝对不被允许的,但”object、number、undefined、null、string“这类型的值是被允许的,同时 toJSON 函数还隐藏了一个致命的陷阱,当对象的 toJSON 函数一直在调用类似如 JSON.stringify(this) 时,那么必定会造成”堆栈溢出“的问题(递归造成的死循环),JSON.stringify 函数并不会推测当前的调用堆栈中是否处于死循环的状态。

var foo = new Object({});
foo.toJSON = function () {
    return JSON.stringify(this);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值