Heim >Web-Frontend >js-Tutorial >Was ist der Unterschied zwischen Deep Copy und Shallow Copy in JS?

Was ist der Unterschied zwischen Deep Copy und Shallow Copy in JS?

Guanhui
GuanhuiOriginal
2020-06-12 14:47:105446Durchsuche

Was ist der Unterschied zwischen Deep Copy und Shallow Copy in JS?

Was ist der Unterschied zwischen Deep Copy und Shallow Copy in JS?

Der Unterschied zwischen den beiden besteht darin, ob die kopierte Entität eines Objekts tatsächlich erhalten wird und nicht eine Referenz. Tiefe Kopie öffnet eine Speicheradresse im Computer, um das kopierte Objekt zu speichern, während flache Kopie nur Es zeigt auf die kopierte Speicheradresse. Wenn das Objekt an der ursprünglichen Adresse geändert wird, ändert sich auch das flach kopierte Objekt entsprechend.

Deep Copy

Die einfachste Methode ist

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: {} }

Es ist zu beachten, dass diese Kopiermethode einige spezielle Dateiattribute (z als reguläre Ausdrücke, undefiniert, Funktion)

Rekursion verwenden, um alle hierarchischen Attribute zu kopieren

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;
}

Flache Kopie

object.assign(target,source)

Objekt Das .assign Die Methode kopiert nur aufzählbare Eigenschaften im Quellobjekt und die Eigenschaften des Objekts selbst.

Wenn eine Eigenschaft im Zielobjekt denselben Schlüssel hat, wird die Eigenschaft durch die Eigenschaft in der Quelle überschrieben. Eigenschaften späterer Quellen überschreiben in ähnlicher Weise frühere Eigenschaften. Object.assign überspringt diejenigen, deren Wert [null] ist. Null ist ein JavaScript-Literal, das Null oder einen „leeren“ Wert darstellt gegenwärtig. Es handelt sich um einen der Grundwerte von JavaScript. ") oder undefiniertes Quellobjekt.

Empfohlenes Tutorial: "

JS Tutorial

"


Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Deep Copy und Shallow Copy in JS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:So verwenden Sie Mock-JQueryNächster Artikel:So verwenden Sie Mock-JQuery