2016-10-24 13 views
1

私はreduxストアに物を保存したいと思っていて、どれがシリアライズ可能で、どれがシリアライズ可能であるかを知りたい。すべてのクラスオブジェクトはJavaScriptでシリアライズ可能ですか?

  1. クラスMyClassの具体{ }
  2. するvar MYCLASS =新しいMyClassの

は、#1、#2シリアライズしますか?
シリアル化のテスト/定義とは何ですか? JSON.stringify()がエラーなく動作するかどうか

https://github.com/markerikson/redux/blob/create-faq-page/docs/FAQ.md

は、私は私の店状態で機能し、約束、または他の非直列化可能アイテムを置くことはできますか?

単純なシリアライズ可能なオブジェクト、配列、およびプリミティブをストアに配置することを強くお勧めします。技術的には、シリアライズ不可能なアイテムをストアに挿入することは可能ですが、そうすることで、ストアの内容を保持し、再水和する能力が損なわれる可能性があります。

答えて

2

いいえ何かがシリアライズ可能かどうかをチェックするには、object == JSON.parse(JSON.stringify(object));

は、ここで私は私のブラウザウィンドウで実行されていましたいくつかの例です:

3 == JSON.parse(JSON.stringify(3)) 
true 
"foo" == JSON.parse(JSON.stringify("foo")) 
true 
class MyClass {} 
undefined 
MyClass == JSON.parse(JSON.stringify(MyClass)) 
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data [Learn More] 

と、このケースでは、JavaScriptがちょうど未定義を返したので、クラスは、すべてでシリアライズすることができないことapears。

+0

'{a:1}'はシリアライズ可能ですが、 '=='ではありません。深い平等をテストするには、[これらのメソッド](http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects)のいずれかを使用できます。 – Amadan

+0

良い点、私のコードはプリミティブでのみ動作します。 JSON.parse(JSON.stringify())の出力が同じであれば、シリアライズ可能です。 – PaulBGD

関連する問題