我正在使用 JavaScript 将对象序列化为 JSON 字符串,
我注意到只有可枚举的对象属性被序列化:
var a = Object.create(null,{
x: { writable:true, configurable:true, value: "hello",enumerable:false },
y: { writable:true, configurable:true, value: "hello",enumerable:true }
});
document.write(JSON.stringify(a)); //result is {"y":"hello"}
[笔]
我想知道为什么会这样?我搜索了MDN 页面,json2解析器文档。我无法在任何地方找到这种行为记录。
我怀疑这是使用仅通过 [[enumerable]]for... in
属性的循环的结果(至少在 的情况下)。这可能可以通过返回可枚举和不可枚举属性的类似方法来完成。但是,序列化可能会有问题(由于反序列化)。json2
Object.getOwnPropertyNames
tl;博士
- 为什么
JSON.stringify
只序列化可枚举的属性? - 这种行为是否记录在任何地方?
- 如何自己实现序列化不可枚举的属性?