9

オブジェクトを 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"}

ペン

なぜだろう?json2パーサーのドキュメントであるMDN ページを検索しました。この動作がどこにも文書化されているのを見つけることができませんでした。

これは、 [[enumerable]] プロパティのみを通過for... inするループを使用した結果であると思われます (少なくとも の場合)。これはおそらく、列挙可能なプロパティと列挙できないプロパティの両方を返すようなもので行うことができます。ただし、シリアル化には問題がある可能性があります(逆シリアル化のため)。json2Object.getOwnPropertyNames

tl;dr

  • JSON.stringify列挙可能なプロパティのみをシリアル化するのはなぜですか?
  • この動作はどこかに文書化されていますか?
  • 列挙不可能なプロパティのシリアル化を自分で実装するにはどうすればよいですか?
4

2 に答える 2