是否可以在javascript中序列化任何类对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在javascript中序列化任何类对象?相关的知识,希望对你有一定的参考价值。

我想在redux商店中存储东西,并想知道哪一个是可序列化的,哪一个不是。

  1. class MyClass {}
  2. 是myClass = new MyClass

具体来说,#1,#2是否可序列化? 什么是可串行化的测试/定义? JSON.stringify()是否正常工作?

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

我可以在我的商店状态中放置函数,承诺或其他不可序列化的项吗?

强烈建议您只将简单的可序列化对象,数组和基元放入商店。从技术上讲,可以将不可序列化的项目插入到商店中,但这样做会破坏持久化和重新水化商店内容的能力。

答案

不。如果要检查某些内容是否可序列化,请检查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只返回undefined。

另一答案

方法和函数(以及任何可执行代码片段)无法序列化,因为您无法使用eval将它们重新水化。

以上是关于是否可以在javascript中序列化任何类对象?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 WCF wsdl 中包含一个 DataContract 类,而该类不属于任何 OperationContract?

表单序列化javascript(无框架)

为啥我不应该让一个类可序列化?

PHP面向对象----- 魔术方法

java 序列化 - 持久化类定义

javascript面向对象