序文: 以下の記事を読む前に、記憶に関する知識を簡単に理解しましょう。以下は簡単な紹介です 1. jsメモリjs のメモリ、またはほとんどの言語のメモリはスタックとヒープに分かれています。基本データ型の変数値はスタック上に割り当てられ、参照データ型の変数値はヒープ上に割り当てられます。スタックはヒープ内の特定のオブジェクトのアドレスのみを格納します。 2. 譲渡基本データ型の場合、代入操作はコピーです。つまり、新しい変数と古い変数は互いに影響しません。 var a = 1; var b = a; 2 = 2; コンソールログ(b); // 2 参照データ型の場合、代入操作は、ヒープ内のオブジェクトを指す変数をスタックに追加するだけです。つまり、参照アドレスをコピーします。新しい変数と古い変数は相互に影響を及ぼします。つまり、新しい変数のオブジェクト値が変更されると、古い変数の対応する値も変更されます。 var a = { 名前: 「マイク」 }; var b = a; b.name = "ジャック"; console.log(a); // {名前: "jack"} 3. 浅いコピー基本データ型とネストされたオブジェクトのないデータの場合、すべての操作はコピー操作であり、新しい変数と古い変数は相互に影響を与えません。 var a = { 名前: 「マイク」 }; var b = {}; b.名前 = a.名前; b.name = "ジャック"; console.log(a) // {名前: "mike"} ただし、ネストされたオブジェクトを持つデータの場合、浅いコピーでは第 1 レベルのオブジェクトのみがコピーされ、より深いレベルの値は参照アドレスとしてコピーされたままになります。 var a = { 名前: 「マイク」、 言語: 最初:「英語」、 2番目:「中国語」 } }; var b = {}; b.名前 = a.名前; b.name = "ジャック"; b.言語 = a.言語; b.language.first = "日本語" console.log(a) // { 言語 : {最初: "日本語"、2番目: "中国語"}} js は浅いコピーを実装します。その考え方は、 関数 shallowCopy(ターゲット) { 結果を {} とします。 for (const キー in ターゲット) { 結果[キー] = ターゲット[キー]; } 結果を返します。 } 4. ディープコピーディープ コピーは完全なコピーであり、新しい変数と古い変数は互いに影響を及ぼしません。 関数クローン(ターゲット) { if (typeof ターゲット === "オブジェクト") { //配列かどうかを判断します let result = Array.isArray(target)? [] : {}; for (const キー in ターゲット) { 結果[キー] = clone(ターゲット[キー]); } 結果を返します。 } それ以外 { ターゲットを返します。 } } これで、js の代入の浅いコピーと深いコピーに関する詳細な記事は終わりです。js の代入の浅いコピーと深いコピーに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: UDP DUP タイムアウト UPD ポート状態検出コード例
参考までにmysql5.5.28のインストールチュートリアルです。具体的な内容は次のとおりです。イン...
誰もがスクラッチ チケットで遊んだことがあると思います。子供の頃、ポケットにお金が入るとすぐに友達に...
CSS 属性セレクターは素晴らしいです。大量のクラス名を追加することを回避し、コード内の問題を指摘す...
目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...
目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...
<br />XHTML と CSS がオブジェクト指向だったらよかったのに。 。太陽は北...
ダイナミックレム1. まず、現在の長さの単位を紹介しましょうpx em Mの幅 / 漢字の幅 1em...
目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...
0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...
シナリオ 1: サーバーの制限により、外部に開かれているポートは 1 つだけですが、別の外部ネットワ...
関連する依存関係をインストールするnpm i lib-flexible --save npm i p...
目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...
この記事では、MySQL ストアド プロシージャの使用方法について説明します。ご参考までに、詳細は以...
Ubuntu 18.04 を使用する Python 開発者向けの参考資料です。 1. Ubuntu ...
目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...