構造化複製アルゴリズム

この記事は翻訳が完了していません。 この記事の翻訳にご協力ください

構造化複製アルゴリズムは HTML5 仕様書で定義された 複雑な JavaScript オブジェクトをコピーするためのアルゴリズムです。これは postMessage() を介して Worker と送受信するときや IndexedDB にオブジェクトを格納するときなど、データを転送するときに内部的に用いられています。無限ループを避けるため、以前にアクセスした参照のマップを保持しながら、入力オブジェクトを再帰処理することで複製していきます。

構造化複製で動作しないもの

  • Function オブジェクトは構造化複製アルゴリズムでは複製されません。複製しようとすると DATA_CLONE_ERR 例外が送出されます。
  • DOM ノードを複製しようとしても同様に DATA_CLONE_ERR 例外が送出されます。
  • 以下に挙げるオブジェクトのパラメーターは保持されません。
    • RegExp オブジェクトの lastIndex フィールドは保持されません。
    • プロパティ記述子、セッター、ゲッター (もしくは同様のメタデータ系機能) は複製されません。たとえば、オブジェクトにプロパティ記述子を使用して読み取り専用にしている場合でも、複製したものではデフォルトの条件である読み取り/書き込みに変わります。
    • プロトタイプチェーンは探索、複製されません。

メモ: ネイティブの Error 型は Chrome では複製できます。Firefox は 対応中 です。

サポート済みの型

オブジェクトの型 備考
すべてのプリミティブ型 symbol を除く
Boolean オブジェクト
String オブジェクト
Date
RegExp lastIndex フィールドは保持されません。
Blob
File
FileList
ArrayBuffer
ArrayBufferView これは基本的に Int32Array のような 型付き配列 すべてを意味します。
ImageBitmap
ImageData
Array
Object これはプレーンオブジェクト (オブジェクトリテラルなど) のみを含みます
Map
Set

関連情報