ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6ディープコピーのいくつかの実装方法とは何ですか?

es6ディープコピーのいくつかの実装方法とは何ですか?

青灯夜游
青灯夜游オリジナル
2022-03-23 12:06:527065ブラウズ

ディープ コピーの実装方法: 1. "Object.assign({},obj)" ステートメントを使用して実装します。 2. "JSON.parse(JSON.stringify(obj))" ステートメントを使用して、 3. これを実現するには、「$.extend(true,[],arr)」ステートメントを使用します。

es6ディープコピーのいくつかの実装方法とは何ですか?

このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

ディープ コピーとは

ディープ コピーはシャロー コピーと相対的なものです。主な違いは参照型に反映されます。コピーは単にスタック内の参照アドレスをコピーするだけなので、新しくコピーした値を変更すると、コピーされたオブジェクトも変更されますが、ディープ コピーはヒープ メモリ内に新しいオブジェクト用のスペースを作成するため、コピーされたオブジェクトは変更されません。理由もなく変更されました。

es6 でディープ コピーを実装する方法

方法 1: Object.assign を使用する

Object.assign はデフォルトでオブジェクトのディープ コピーを実行しますが、最も外側のレイヤーのディープ コピーのみを実行することに注意する必要があります。つまり、オブジェクト内にオブジェクトがネストされている場合、オブジェクトはまだ浅くコピーされています;

function cloneDeepAssign(obj){
  return Object.assign({},obj)
}

(警告: 配列コピー メソッドでは、...slice、## を使用してください) #concat コピー時にも同じ効果が得られます。最も外側のレイヤーのみが深くコピーされます)

同時に、

Object.assign が列挙可能なプロパティを対象としていることがわかります。オブジェクト自体の、および列挙不可能なプロパティの場合は効果なし;

したがって、あるレベルで単一のオブジェクトを扱うときは、シンプルで高速なこの方法を検討できます。 (試してみましたが、未定義はサポートされていません)

方法 2: JSON

これは、私たちが最も頻繁に言及する方法です。これはディープ コピー メソッドです。一般に、ほとんどのディープ コピーは JSON を使用して解決できます。本質は、JSON が新しいオブジェクトを格納するために新しいメモリを自ら構築するということです。

function cloneDeepJson(obj){
  return JSON.parse(JSON.stringify(obj))
}

ただし、注意する必要があるのは:

  • unknownsymbol を無視します;

    JSON
  • 形式文字列は
  • Function

    をサポートしておらず、シリアル化中に自動的に削除されるため、 Function にコピーできません。

  • #Map

    SetRegExpDateArrayBuffer# など# # およびその他の組み込み型はシリアル化中に失われます;

    は循環参照オブジェクトのコピーをサポートしません; (循環参照はオブジェクト内の特定の属性として大まかに理解できます)値はそれ自体です)
  • 方法 3: jQuery の
$.extend()

<pre class="brush:php;toolbar:false">var array = [1,2,3,4]; var newArray = $.extend(true,[],array);</pre> を使用する欠点は、jQuery ライブラリも導入する必要があるため、一般的には使用されないことです。

[関連する推奨事項:

JavaScript ビデオ チュートリアル

Web フロントエンド ]

以上がes6ディープコピーのいくつかの実装方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。