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

JSON序列化与反序列化后对象中函数丢失的原因探究

为什么JSON序列化/反序列化会丢失对象的函数属性?

核心原因:JSON规范不支持函数类型

JSON(JavaScript Object Notation)是纯数据交换格式,它的标准仅定义了6种可序列化的数据类型:字符串、数字、布尔值、null、对象、数组。函数(包括普通函数、箭头函数等所有函数类型)不在这个范围内——JSON的设计初衷是传递静态数据,而非可执行代码。

JSON.stringify的处理机制

调用JSON.stringify处理对象时,它会遍历对象的可枚举属性,遇到以下类型的属性值会直接跳过,不写入最终的JSON字符串:

  • 所有函数类型(普通函数、箭头函数、生成器函数等)
  • undefined
  • Symbol类型
  • 不可枚举的属性(默认配置下)

对应你的代码示例:

let a = {
    "b" : 1,
    "a" : function(){ return 1; }
}
let b = {
    "b" : 2,
    "a" : ()=>{ return 2; }
}

执行JSON.stringify(a)得到的结果是{"b":1},JSON.stringify(b)得到的是{"b":2}——两个对象的a属性(函数类型)都被直接忽略。后续用JSON.parse解析这些字符串,自然只能得到不含函数的对象。

额外说明

如果确实需要在序列化时保留函数逻辑,只能手动将函数转换为字符串(比如obj.fn = obj.fn.toString()),反序列化后再用eval或new Function还原。但这种做法存在严重安全风险(可能执行恶意代码),除非完全信任数据源,否则不建议使用。

内容的提问来源于stack exchange,提问作者Jeel Dhamsaniya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:45:33