ホームページ  >  記事  >  ウェブフロントエンド  >  es6 の分解はディープコピーですか?

es6 の分解はディープコピーですか?

WBOY
WBOYオリジナル
2022-04-25 19:04:042465ブラウズ

es6 の分解はディープ コピーではありません。分解の元のオブジェクトが 1 次元の配列またはオブジェクトである場合、分解は深いコピーです。分解の元のオブジェクトが多次元の配列またはオブジェクトである場合、分解は浅いコピーです。分解では効果が得られないため、多次元配列のディープ コピーでは、構造を分割することはできません。これはディープ コピーとみなされますが、シャロー コピーである必要があります。

es6 の分解はディープコピーですか?

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

es6 はディープ コピーを構造化しますか?

ES6 での代入の構造化に関する知識は誰でもよく知っているはずです。いわゆる分割代入は、パターンを使用してターゲット構造からデータを迅速に取得するソリューションです。例:
es6 の分解はディープコピーですか?
分割により、配列やオブジェクトから必要なデータを簡単に取得できます。 。ただし、これがディープ コピーとシャロー コピーにどのような関係があるのか​​と疑問に思われるかもしれません。

まず、ディープ コピーとシャロー コピーについて確認しましょう。

いわゆるシャロー コピーとディープ コピー: シャロー コピーとは、コピー プロセス中に、トラバース中の部分がオブジェクト/配列であることを意味します。 type は元のアドレスを指しますが、ディープ コピーは新しいメモリ アドレスを完全に開きます。言い換えると、

  • ディープコピー: 新しい変数の値を変更しても、元の変数の値には影響しません。デフォルトでは、基本的なデータ型 (数値、文字列、null、未定義、ブール値) がディープ コピーされます。
  • 浅いコピー: 新しい変数の値を変更すると、元の変数の値に影響します。デフォルトでは、参照型 (オブジェクト) は浅いコピーです。

では、解体において、それは深いコピーでしょうか、それとも浅いコピーでしょうか?

es6 の分解はディープコピーですか?
上記のコードでは、配列とオブジェクトをそれぞれ分解し、次に構造化された変数の値を変更して、変数と元の配列とオブジェクトをそれぞれ出力します。結果は次のとおりです。

es6 の分解はディープコピーですか?
元の配列とオブジェクトのデータが変更されていないことがわかりました。これは、分割代入がディープ コピーであることを意味しますか? ?

例を少し変更してみましょう。コードは次のとおりです。

es6 の分解はディープコピーですか?
新しいデータ属性をオブジェクトに追加しました。データのデータは配列です。分解後、データのデータが変更され、結果は次のようになります。

es6 の分解はディープコピーですか?
分解された変数データの変更により、元のデータが変更されることがわかりました。 、構造化されていない割り当てはまだ浅いコピーです。

要約:

代入の構造化、分解される元のオブジェクトが 1 次元の配列またはオブジェクトである場合、その本質は基本データ型に対して等号の代入を実行することです。の場合、それは深いコピーです;
多次元配列またはオブジェクトの場合、その本質は参照型データに等号を割り当てることであり、それは浅いコピーです;
最終的な結論は次のとおりです: 構造化代入は浅いコピーです (多次元配列ができないため、またはオブジェクトが深いコピーの機能を実現するため);

[関連する推奨事項: JavaScript ビデオ チュートリアル ウェブフロントエンド]

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

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