古い質問だと思いますが、答えにもう少し追加したかったのです。そうしないと、誰かがこのページから離れてJSON.stringify
、比較/クローン作成に使用することは、慣れていない限り問題なく機能すると誤って考えてしまう可能性があるためです。メンバーが順序付けされていないオブジェクトを比較/複製します。(受け入れられた答えに公平を期すために、彼らはそれを考えて立ち去るべきではありません;それは「[メンバー]が同じ順序で入力された場合、このアプローチはほとんどの場合うまくいくでしょう」と言います。)
コードは、おそらく潜在的な問題を最もよく示しています。
JSON.stringify(NaN) === JSON.stringify(null)
// => true
JSON.stringify(Infinity) === JSON.stringify(null)
// => true
// or, to put it all together:
JSON.stringify({ val1: (1 / 0), val2: parseInt("hi there"), val3: NaN }) === JSON.stringify({ val1: NaN, val2: null, val3: null })
// => true
// and here's the same example with "cloning" rather than comparison:
JSON.parse(JSON.stringify({ val1: (1 / 0), val2: parseInt("hi there"), val3: NaN }))
// => Object {val1: null, val2: null, val3: null}
これらは、注文が問題ではない場合でも問題を引き起こす可能性のある癖です(他の人が言っているように、問題になる可能性があります)。ほとんどの場合、これらの癖が醜い頭をもたげる可能性は低いですが、バグを見つけるのが非常に困難になる可能性があるため、注意しておくことをお勧めします。