update.世の中には色々なディープコピーがあると知ったのでまとめました。ちなみにES2015念頭に書きました。JSONのAPIを使ってみるJSON.parse(JSON.stringify(obj))メリット簡単。オブジェクト等色んなオブジェクトがうまくコピーできない。"2016-12-17T13:48:56.350Z"}ということで万能ではないことに注意しなければいけません。今までなんにもかんがえず使っていたのは内緒です。APIのような事態が発生することなく適切なオブジェクトをコピーできます。falseなプロパティは存在がなかったことにされてしまう。falseなプロパティはObject.assignでもコピーされないようなのであまり気にするなということだと勝手に解釈しました。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Properties_on_the_prototype_chain_and_non-enumerable_properties_cannot_be_copiedさてもう一つ問題があって実は上記のロジックではJSの様々なObjectTypeに耐えられません。Dateなどのオブジェクトにも確実に対応するには以下のようなスクリプトになります。objectDateRegExpBlobArray等々割と多いです。自前で全てのパターンに対応するようなスクリプトを書くことは少しためらわれます。必要最低限を用意しておくというのが現実解だと思いました。obj)メリット簡単。デメリット最近ではjQuery使わない状況も多いのでそんなに使えるものでもないのかもしれないです。Arrayしか対応していない仕様です。いうことで仕様を理解して使う分には問題なさそうです。Array以外をコピーしたいならlodashを見ればいいよとの記述があったのでlodashを使います。https://lodash.com/docs/4.17.2#cloneDeep_.cloneDeep(obj)メリット簡単。(後述)に基づいてコピーされるため前述のオブジェクト類に対応できます。DOMはディープコピーできず、lodashも同じようにディープコピーはできないようです。algorithmとはHTML5にて仕様を定義されている、オブジェクトをシリアライズする仕組みです。APIより優れています。https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithmこれより下のディープコピーの例はこちらのアルゴリズムに沿ってコピーされます。要素がJSONにある場合にエラーを吐きます。ここが少し注意するところです。これをどう使うかというとMDNを眺める限りJSONのAPIのように直接呼ぶことができないようなので、オブジェクトのシリアライズを伴うAPIを使用することによって間接的に呼び出しディープコピーを行います。PostMessageを使ってみるMessageChannelは元々はコンテキストの違うJS同士でデータをやり取りするものです。このAPIはデータを渡す時にデータをシリアライズするのでデータをコピーできます。WebWorkerでも同じことができますが、データのコピーだけが目的ならMessageChannelで十分だと思います。}deepClone(obj).then(console.log)メリット非同期なので大きいデータでも安心して実行できます。デメリット同期で処理を行いたい場合には非同期であることがデメリットになると思います。見少し複雑かもしれません。APIを使ってみるブラウザのヒストリーを操作するAPIです。このAPIもデータをシリアライズしてくれます。clone};メリット同期で処理できるデメリットサイズ制限があるので640000以上の文字数は対応できません。PostMessageと以上に一見するとこれがデータをコピーしている処理とは思いもしないのでその点で最もダーティーハック的です。無意味にhistoryにアクセスするオーバーヘッドが大きそうなのでやめておいたほうがいいのかなぁってなんとなく思ってます。まとめ本当は速度測定までやりたかったんですが、力尽きました。今まではディープコピーを適当にやっていたのでもう少し考えつつ状況に応じて使い分けていきたいと思いました。falseなプロパティについては今回あげた例ではコピーできる方法がなさそうでした。いうものなのでしょうか。実務上なんら影響はありませんが少し疑問に思えました。個人的にはライブラリ依存したくないのでPostMessageの方法が一番しっくりきました。データコピー用に使うのが正しいのかあまり確証は得られていませんが。いい方法等ご存知でしたら教えてください。upLoginユーザーは見つかりませんでした。