suchen
HeimWeb-FrontendFront-End-Fragen und AntwortenWas ist der Unterschied zwischen Deep Copy und Shallow Copy in Javascript?

In JavaScript kopiert das flache Kopieren nur die Speicheradresse der Originaldaten, was zwei Datenzeigern entspricht, die auf dieselbe Adresse zeigen. Wenn sich ein Datenelement ändert, wirkt sich dies auf die beiden Datenpunkte aus Deep Copy zeigt auf dieselbe Adresse. Wenn sich ein Element ändert, hat dies keine Auswirkungen auf das andere.

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

Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.

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

Bevor wir uns mit Shallow Copy und Deep Copy befassen, wollen wir zunächst die Konzepte von Heap und Stack verstehen.

Heap und Stack sind beide Bereiche, die zur Speicherung im Speicher unterteilt sind. Dem Stapel wird automatisch Speicherplatz zugewiesen, der vom System automatisch freigegeben wird. Dem Heap wird dynamisch Speicher zugewiesen, und seine Größe ist variabel und wird nicht automatisch freigegeben.

Dann schauen wir uns grundlegende Datentypen und Referenzdatentypen an (auch als komplexe Datentypen bekannt)

1. Grundlegende Typen: String, Number, Boolean, Null, undefiniert, Symbol (neu in ES6, stellt eindeutige Basiswerte dar); Typen Der Wert belegt eine feste Größe im Speicher und wird im Stapelspeicher gespeichert.

2. Referenztypen: Objekt, Array, Datum, Funktion usw.; der Wert des Referenztyps ist ein Objekt und wird im Heapspeicher gespeichert.

Das Konzept der dunklen und flachen Kopie

Hinweis: Der Unterschied zwischen dunkler und flacher Kopie gilt nur für komplexe Objekte wie Array und Objekt.

1. Flache Kopie: Es wird nur die Speicheradresse der Originaldaten kopiert, was zwei Datenzeigern entspricht, die auf dieselbe Adresse zeigen. Änderungen an einem der Datenelemente wirken sich auf das andere aus.

2. Deep Copy: Die beiden Daten verweisen auf unterschiedliche Adressen und die Datenelemente wirken sich nicht gegenseitig aus, wenn sie sich ändern. 1. Flache Kopie Dabei müssen Sie die Anforderungen für das tiefe Kopieren klären. Handelt es sich nur um eine tiefe Kopie der Objektattribute oder Array-Elemente der ersten Ebene oder um eine rekursive Kopie aller Objektattribute und Array-Elemente?

Deep Copy Array

①Direktes Durchlaufen

var arr = [0, 1, 2];
var arrB;
 
//把arr赋值给arrB
arrB = arr;
console.log("arr:", arr);
console.log("arrB:", arrB);
console.log("-----------改变arrB中数组元素的值后-----------");
arrB[0] = 5;
console.log("arr:", arr);
console.log("arrB:", arrB);

Ausführungsergebnis: Die Änderung des arrB-Array-Elements hat keinen Einfluss auf den Wert des arr-Array-Elements

②: wird zum Verbinden von zwei oder mehr Arrays verwendet. Diese Methode verändert das vorhandene Array nicht, sondern gibt lediglich eine Kopie des verketteten Arrays zurück.

var arr = [1, 2, 3, 4];
function copy(arr){
    var newArr = [];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    return newArr;
}
 
var arrB = copy(arr);
console.log("arrB:", arrB);
console.log("-----------改变arrB中数组元素的值后-----------");
arrB[0] = 5;
console.log("arr:", arr);
console.log("arrB:", arrB);

Laufendes Ergebnis: Die Elemente des arr-Arrays haben sich mit den Änderungen der Elemente des arrB-Arrays nicht geändert

③: Diese Methode gibt einen Teil der Elementfragmente zurück, die aus dem vorhandenen Array abgefangen wurden, um ein zu bilden neues Array (das ursprüngliche Array wird nicht verändert) .

var arr = [0, 1, 2];
var arrB;
 
//把arr赋值给arrB
arrB = arr.concat();
console.log("arr:", arr);
console.log("arrB:", arrB);
console.log("-----------改变arrB中数组元素的值后-----------");
arrB[0] = 5;
console.log("arr:", arr);
console.log("arrB:", arrB);

Ausführungsergebnisse: Änderungen an den Elementen im Array wirken sich nicht gegenseitig aus

Die oben genannten drei Methoden eignen sich nur für einfache Arrays, bei denen die Array-Elemente grundlegende Datentypen sind, und für Arrays, bei denen es sich um Array-Elemente der ersten Ebene handelt Referenztypvariablen wie Objekte oder Arrays Im Allgemeinen sind alle oben genannten Methoden wirkungslos.

Verwandte Empfehlungen:

Javascript-Lern-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Deep Copy und Shallow Copy in Javascript?. 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
Die Vorteile der starken Gemeinschaft und des Ökosystems von React von ReactDie Vorteile der starken Gemeinschaft und des Ökosystems von React von ReactApr 29, 2025 am 12:46 AM

React'sStrongCommunityAndemoFfernumousBenefits: 1) unmittelbarer AspekteStosolutions -Throughplatformslikestackoverflowandgithub;

Reagieren Sie nativ für die mobile Entwicklung: Aufbau von plattformübergreifenden AppsReagieren Sie nativ für die mobile Entwicklung: Aufbau von plattformübergreifenden AppsApr 29, 2025 am 12:43 AM

ReactnativeIsChosenFormoBileDententwicklungsentwicklung

Status korrekt mit usemESTATE () in React aktualisierenStatus korrekt mit usemESTATE () in React aktualisierenApr 29, 2025 am 12:42 AM

Richtige Aktualisierung von usestate () in reagieren erfordert das Verständnis der Details des Staatsmanagements. 1) Verwenden Sie funktionale Updates, um asynchrone Updates zu verarbeiten. 2) Erstellen Sie ein neues Zustandsobjekt oder ein neues Array, um zu vermeiden, dass der Status direkt geändert wird. 3) Verwenden Sie ein einzelnes Zustandsobjekt, um komplexe Formulare zu verwalten. 4) Verwenden Sie die Anti-Shake-Technologie, um die Leistung zu optimieren. Diese Methoden können Entwicklern helfen, häufige Probleme zu vermeiden und robustere React -Anwendungen zu schreiben.

Reacts Komponentenbasierte Architektur: Ein Schlüssel zur skalierbaren UI-EntwicklungReacts Komponentenbasierte Architektur: Ein Schlüssel zur skalierbaren UI-EntwicklungApr 29, 2025 am 12:33 AM

Die komponentierte Architektur von React macht die skalierbare UI -Entwicklung durch Modularität, Wiederverwendbarkeit und Wartbarkeit effizient. 1) Modularität ermöglicht es der Benutzeroberfläche, in Komponenten unterteilt zu werden, die unabhängig entwickelt und getestet werden können. 2) Wiederverwendbarkeit der Komponente spart Zeit und behält die Konsistenz in verschiedenen Projekten auf. 3) Die Wartbarkeit erleichtert die Problempositionierung und Aktualisierung, aber Komponenten müssen überkompytrechisch und tief verschachtelt werden.

Deklarative Programmierung mit React: Vereinfachung der UI -LogikDeklarative Programmierung mit React: Vereinfachung der UI -LogikApr 29, 2025 am 12:06 AM

Bei React vereinfacht die deklarative Programmierung die UI -Logik, indem sie den gewünschten Zustand der Benutzeroberfläche beschreibt. 1) Durch Definieren des UI -Status wird React automatisch DOM -Updates verarbeitet. 2) Diese Methode macht den Code klarer und leichter zu warten. 3) Auf die Komplexität des staatlichen Managements und die optimierte Wiederherstellung sollten jedoch Aufmerksamkeit geschenkt werden.

Die Größe des React -Ökosystems: Navigation in einer komplexen LandschaftDie Größe des React -Ökosystems: Navigation in einer komplexen LandschaftApr 28, 2025 am 12:21 AM

Tonavigatereaccts complexecosystemeffektiv, verständliche thetoolsandlibraries, erkenntheirstrengthsandweaknesses und integratheTemtemtemhanced Development.StartWithCorereActconceptsandusSestate, dann nachgradualintroducalexsolutionsklikeduxtexsucteduxtusicledxasneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeei

Wie React Schlüssel verwendet, um Listenelemente effizient zu identifizierenWie React Schlüssel verwendet, um Listenelemente effizient zu identifizierenApr 28, 2025 am 12:20 AM

ReactuseSkeyStoeffictionIdentifyListItemsByProvidableIntableIdentitytoEachElement.1) KeysallowreactToTrackChangesinlistSwithoutre-RenderingTheentirelist.2) wählendeUniqueandStableKeys, Vermeiden von ARTARAYINDICES.3) korrektKeyUssistentimProvvoveSperSPesSper-stableSperformanc

Debugging wichtiger Probleme im Zusammenhang mit Reaktionen: Identifizierung und Lösung von ProblemenDebugging wichtiger Probleme im Zusammenhang mit Reaktionen: Identifizierung und Lösung von ProblemenApr 28, 2025 am 12:17 AM

KeysinreacctarecrucialforoptimizingTheRenderingProcessandmanagingDynamicListseffezivität.TospotandFixkey-bezogene Veriss: 1) adduniquekeystolistItemstovoidWarningsandperformanceISSUES, 2) UseUcentifiersFromDatainStoficesforstableKeys, 3) sicherstellen

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung