このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

構造化複製アルゴリズム

構造化複製アルゴリズムは、複雑な JavaScript オブジェクトをコピーします。 これは、structuredClone() を呼び出したとき、postMessage() を介してワーカーと送受信するとき、 IndexedDB にオブジェクトを格納するとき、他の API のためにオブジェクトをコピーするときなどに、内部で用いられています。

無限ループを避けるため、以前にアクセスした参照のマップを保持しながら、入力オブジェクトを再帰処理することで複製していきます。

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

  • Function オブジェクトは構造化複製アルゴリズムでは複製されません。複製しようとすると DataCloneError 例外が発生します。
  • DOM ノードを複製するときも同様に DataCloneError 例外発生します。
  • 一部のオブジェクトのプロパティは保持されません。
    • RegExp オブジェクトの lastIndex フィールドは保持されません。
    • プロパティ記述子、セッター、ゲッター(もしくは同様のメタデータ系機能)は複製されません。 たとえば、あるオブジェクトがプロパティ記述子によって読み取り専用になっている場合でも、複製したものでは既定の条件である読み取り/書き込みに変わります。
    • プロトタイプチェーンは探索、複製されません。
    • クラスのプライベート要素は複製されません(ただし、組み込み型の内部フィールドは複製されることがあります)。

対応している型

JavaScript 型

エラー型

Error 型では、エラー名は Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError のいずれかでなければなりません(そうでなければ "Error" に設定されます)。

ブラウザーは、name および message プロパティをシリアライズしなければならないし、stackcause など、エラーのそれ以外の「興味深い」プロパティについてもシリアライズすることが期待されます。

AggregateError については、whatwg/html#5749 で仕様に対応が追加される見込みです(一部のブラウザーではすでに対応しています)。

Web/API 型

メモ: シリアライズ可能なオブジェクトは、ウェブ IDL ファイル において、[Serializable] 属性をつけてマークアップされます。

関連情報