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
Freigeben: 2020-06-12 14:47:10
Original
5407 Leute haben es durchsucht

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: {} }
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Flache Kopie

object.assign(target,source)
Nach dem Login kopieren

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!

Verwandte Etiketten:
js
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage