構造化複製アルゴリズム

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

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

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

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

サポート済みの型

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

関連情報