私は、JavaScriptでJSON文字列にJSON.stringifyは、列挙できないプロパティをシリアル化しないのはなぜですか?
をオブジェクトをシリアル化するよ私だけ列挙オブジェクトのプロパティは、シリアライズ取得気づい:
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"}
[pen]
つまり、なぜ私は思ったんだけど?私はMDN page、json2パーサのドキュメントを検索しました。 この動作がどこに書かれているかわかりませんでした。
これは、少なくともjson2
の場合、only go through [[enumerable]]のプロパティのfor... in
ループを使用した結果と思われます。これはおそらく、Object.getOwnPropertyNames
のように、列挙可能なプロパティと列挙可能でないプロパティの両方を返すことで行うことができます。 (直列化によって)シリアル化するのは問題があるかもしれません。
TL; DR
- はなぜ
JSON.stringify
のみ列挙プロパティをシリアル化しますか? - この動作はどこに文書化されていますか?
- 非列挙型プロパティを自分でシリアル化する方法を教えてください。
enumerableをfalseに設定すると、インスタンスが追加されません。文字列化する前にオブジェクトをコンソールにログオンしてみると、オブジェクト自体に 'x'がないことがわかります。文字列化されていれば確実にそこにはいられません。 – adeneo
@adeneoそれはおそらく、stringifyのようなものもgetOwnPropertyNamesのようなものも使用しているからでしょう。 Object.getOwnPropertyNames(a)は["x"、 "y"]を返し、obj.xを入力すると "hello"を取得します。 –
はい、私は気付きました。これは、おそらくオブジェクトを再考し、オブジェクトを作成する別の方法を見つけるべきであるという良い兆候です。 – adeneo