ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6ディープコピーのいくつかの実装方法とは何ですか?
ディープ コピーの実装方法: 1. "Object.assign({},obj)" ステートメントを使用して実装します。 2. "JSON.parse(JSON.stringify(obj))" ステートメントを使用して、 3. これを実現するには、「$.extend(true,[],arr)」ステートメントを使用します。
このチュートリアルの動作環境: 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
function cloneDeepJson(obj){ return JSON.parse(JSON.stringify(obj)) }ただし、注意する必要があるのは:
unknown と
symbol を無視します;
をサポートしておらず、シリアル化中に自動的に削除されるため、
を
Function にコピーできません。
、Set
、RegExp
、Date
、ArrayBuffer# など# # およびその他の組み込み型はシリアル化中に失われます;
<pre class="brush:php;toolbar:false">var array = [1,2,3,4];
var newArray = $.extend(true,[],array);</pre>
を使用する欠点は、jQuery ライブラリも導入する必要があるため、一般的には使用されないことです。
JavaScript ビデオ チュートリアル
、Web フロントエンド ]
以上がes6ディープコピーのいくつかの実装方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。