JavaScriptでディープコピーを行う

JavaScriptでの代入はシャローコピーとして扱われる。 ディープコピーを行う場合は、組み込みのstructedClone関数を利用する。

const original = {
  str: "x",
  object: {
    str: "yy",
  },
  date: new Date(),
  _: undefined,
};
const deepCopy1 = structuredClone(original);

structedCloneの制限事項

structedClone関数はオブジェクトの関数をコピーすることができない。 コピーしようとするとDOMExceptionが発生してしまう。

Uncaught DOMException: Failed to execute 'structuredClone' on 'Window': () => {
    return "func";
  } could not be cloned.

参考

Window: structuredClone() method - Web APIs | MDN