ホームページ > ウェブフロントエンド > jsチュートリアル > JS のディープ コピーとシャロー コピーの違いは何ですか?

JS のディープ コピーとシャロー コピーの違いは何ですか?

Guanhui
リリース: 2020-06-12 14:47:10
オリジナル
5408 人が閲覧しました

JS のディープ コピーとシャロー コピーの違いは何ですか?

#JS のディープ コピーとシャロー コピーの違いは何ですか?

両者の違いは、オブジェクトのコピーされたエンティティが参照ではなく実際に取得されるかどうかです。ディープ コピーは、コピーされたオブジェクトを保存するためにコンピューター内のメモリ アドレスを開きますが、シャロー コピーは、コピーされたオブジェクトを保存するためにコンピューター内のメモリ アドレスを開きます。コピーされたメモリ アドレスのみを指します。元のアドレスのオブジェクトが変更されると、浅くコピーされたオブジェクトもそれに応じて変更されます。

ディープコピー

最も簡単な方法は

JSON.parse(JSON.stringify())
function deepCopy(o) {
    return JSON.parse(JSON.stringify(o))
}
var c = {
    age: 1,
    name: undefined,
    sex: null,
    tel: /^1[34578]\d{9}$/,
    say: () => {
        console.log('hahha')
    }
}
// { age: 1, sex: null, tel: {} }
ログイン後にコピー

です。このコピー方法では一部の特殊なファイルのプロパティ(プロパティなど)をコピーできないことに注意してください。正規表現、undefine、関数として)

再帰を使用してすべての階層プロパティをコピーします

function deepCopyTwo(obj) {
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj == 'object') {
        for (const key in obj) {
            //判断obj子元素是否为对象,如果是,递归复制
            if (obj[key] && typeof obj[key] === "object") {
                objClone[key] = deepCopyTwo(obj[key]);
            } else {
                //如果不是,简单复制
                objClone[key] = obj[key];
            }
        }
    }
    return objClone;
}
ログイン後にコピー

浅いコピー

object.assign(target,source)
ログイン後にコピー

Objectこのメソッドは、ソース オブジェクト内の列挙可能なプロパティとオブジェクト自体のプロパティのみをコピーします。

ターゲット オブジェクト内のプロパティに同じキーがある場合、そのプロパティはソース内のプロパティによって上書きされます。後のソースのプロパティも同様に、以前のプロパティをオーバーライドします。

Object.assign は、値が [null] のプロパティをスキップします。null は、null または「空」の値を表す JavaScript リテラルです。つまり、オブジェクト値は存在しません。現在。 JavaScript のプリミティブ値の 1 つです。 ") または未定義のソース オブジェクト。

推奨チュートリアル: "JS チュートリアル "



##

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

関連ラベル:
js
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート