1. 2.6 结构化数据的安全传递
      1. 2.6.1 可序列化对象
      2. 2.6.2 可转移对象
      3. 2.6.3 结构化克隆 API

2.6 结构化数据的安全传递

为了支持传递 JavaScript 对象,包括 平台对象,跨越 领域边界,本规范定义了用于序列化和反序列化对象的架构,在某些情况下包括传输基础数据而不是复制数据。总的来说,这个序列化/反序列化过程被称为“结构化克隆”,尽管大多数 API 执行单独的序列化和反序列化步骤。(一个显著的例外是 structuredClone() 方法。)

2.6.1 可序列化对象

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariChrome77+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

可序列化对象 支持以独立于任何给定 领域 的方式序列化,然后反序列化。这允许它们存储在磁盘上并稍后恢复,或者跨越 代理甚至 代理集群边界克隆。

并非所有对象都是 可序列化对象,而且并非所有可序列化对象的方面在序列化时都能保留。

2.6.2 可转移对象

可转移对象 支持跨越 代理进行转移。转移实际上是在共享对基础数据的引用并随后分离被转移对象的情况下重新创建对象。这对转移昂贵资源的所有权很有用。并非所有对象都是 可转移对象,而且并非所有可转移对象的方面在转移时都能保留。

转移是一个不可逆且非幂等的运算。一旦对象被转移,它就不能再被转移,或者说也不能被使用。

2.6.3 结构化克隆 API

result = self.structuredClone(value[, { transfer }])

structuredClone

在所有当前引擎中支持。

Firefox94+Safari15.4+Chrome98+
OperaEdge98+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

获取输入值并通过执行结构化克隆算法返回一个深层副本。 可转移对象 列在 transfer 数组中,它们会被转移,而不是仅仅克隆,这意味着它们不再在输入值中可用。

如果输入值的任何部分不可 序列化,则抛出 "DataCloneError" DOMException