構造化複製アルゴリズム

構造化複製アルゴリズム は複雑な 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 (en-US) 他の 型付き配列 を含む
ImageBitmap (en-US)
ImageData
Array
Object これはプレーンオブジェクト (オブジェクトリテラルなど) のみ を含みます
Map
Set

関連情報