JavaScript - Shallow Copy: A Beginner's Guide
Hallo Zusammen, zukünftige JavaScript-Zauberer! Heute machen wir uns auf eine aufregende Reise in die Welt der flachen Kopien in JavaScript. Keine Sorge, wenn du neu im Programmieren bist – ich werde dein freundlicher Guide sein und alles Schritt für Schritt erklären. Also, hole dir einen Becher Kaffee (oder dein Lieblingsgetränk) und tauchen wir ein!
Was ist eine flache Kopie?
Bevor wir uns den Details der flachen Kopie widmen, beginnen wir mit einer einfachen Analogie. Stell dir vor, du hast ein wunderschönes Gemälde und möchtest eine Kopie davon machen. Du hast zwei Möglichkeiten:
- Mache ein Foto vom Gemälde (flache Kopie)
- Erstelle das gesamte Gemälde von Grund auf neu (tiefe Kopie)
In JavaScript ist eine flache Kopie wie das Fotografieren. Sie erstellt ein neues Objekt oder Array, aber die Elemente darin sind Referenzen auf die gleichen Elemente wie das Original.
Wie die flache Kopie funktioniert
Wenn du eine flache Kopie erstellst:
- Ein neues Objekt oder Array wird erstellt
- Die oberflächlichen Eigenschaften werden kopiert
- Eingeschlossene Objekte oder Arrays werden immer noch aus dem Original referenziert
Lassen wir das mit ein wenig Code in die Tat umsetzen!
// Ursprüngliches Objekt
let original = {
name: "Alice",
age: 30,
hobbies: ["reading", "swimming"]
};
// Flache Kopie
let shallowCopy = Object.assign({}, original);
// Ändern der Kopie
shallowCopy.name = "Bob";
shallowCopy.hobbies.push("coding");
console.log(original);
console.log(shallowCopy);
Wenn du diesen Code ausführst, wirst du etwas Interessantes sehen:
{name: "Alice", age: 30, hobbies: ["reading", "swimming", "coding"]}
{name: "Bob", age: 30, hobbies: ["reading", "swimming", "coding"]}
Beachte, wie das Ändern von name
nur die Kopie beeinflusst hat, aber das Ändern von hobbies
beide Objekte beeinflusst hat. Das ist das Wesen einer flachen Kopie!
Tiefen Kopie vs. flache Kopie
Nun, da wir die flache Kopie verstehen, vergleichen wir sie mit ihrem Geschwister, der tiefen Kopie.
Eigenschaft | Flache Kopie | Tiefen Kopie |
---|---|---|
Neue Objekterstellung | Ja | Ja |
Kopiert oberflächliche Eigenschaften | Ja | Ja |
Kopiert eingeschlossene Objekte/Arrays | Nein (referenziert Original) | Ja (erstellt neue Kopien) |
Leistung | Schneller | Langsamer |
Speicherplatzverbrauch | Weniger | Mehr |
Wann man flache Kopien verwendet
Flache Kopien sind großartig, wenn:
- Du nur oberflächliche Eigenschaften ändern musst
- Leistung ein Anliegen ist
- Du einen neuen Verweis auf ein Objekt erstellen möchtest
Wann man tiefen Kopien verwendet
Tiefen Kopien sind besser, wenn:
- Du eingebettete Eigenschaften ändern musst, ohne das Original zu beeinflussen
- Du eine完全独立的对象副本想要
Beispiele für flache Kopien in JavaScript
Lassen wir uns einige häufige Wege ansehen, um flache Kopien in JavaScript zu erstellen!
1. Object.assign()
let original = { a: 1, b: { c: 2 } };
let copy = Object.assign({}, original);
copy.a = 5;
copy.b.c = 10;
console.log(original); // { a: 1, b: { c: 10 } }
console.log(copy); // { a: 5, b: { c: 10 } }
Hier erstellt Object.assign()
eine flache Kopie. Das Ändern von a
beeinflusst nur die Kopie, aber das Ändern von b.c
beeinflusst beide Objekte, weil es eine eingebettete Eigenschaft ist.
2. Spread-Operator (...)
let fruits = ["apple", "banana", ["grape", "orange"]];
let fruitsCopy = [...fruits];
fruitsCopy[0] = "pear";
fruitsCopy[2].push("kiwi");
console.log(fruits); // ["apple", "banana", ["grape", "orange", "kiwi"]]
console.log(fruitsCopy); // ["pear", "banana", ["grape", "orange", "kiwi"]]
Der Spread-Operator erstellt eine flache Kopie des Arrays. Das Ändern des ersten Elements beeinflusst nur die Kopie, aber das Hinzufügen zum eingebetteten Array beeinflusst beide.
3. Array.from()
let numbers = [1, 2, [3, 4]];
let numbersCopy = Array.from(numbers);
numbersCopy[0] = 10;
numbersCopy[2].push(5);
console.log(numbers); // [1, 2, [3, 4, 5]]
console.log(numbersCopy); // [10, 2, [3, 4, 5]]
Array.from()
erstellt ebenfalls eine flache Kopie. Die ersten Ebenen werden kopiert, aber eingebettete Arrays werden weiterhin referenziert.
Bedeutung der flachen Kopie
Du fragst dich vielleicht, "Warum brauchen wir überhaupt flache Kopien?" Eine großartige Frage! Flache Kopien sind in vielen Szenarien äußerst nützlich:
-
Leistung: Flache Kopien sind schneller und verbrauchen weniger Speicher als tiefe Kopien, was sie ideal für große Objekte oder häufige Operationen macht.
-
Unveränderlichkeit: Sie helfen dabei, Unveränderlichkeit in deinem Code zu erhalten, was entscheidend für vorhersehbare Staatsverwaltung in modernen JavaScript-Frameworks ist.
-
Vermeidung von Nebeneffekten: Flache Kopien ermöglichen es dir, ein Objekt zu ändern, ohne das Original direkt zu verändern, was unerwartete Nebeneffekte in deinem Code reduziert.
-
React und Redux: In React- und Redux-Anwendungen werden flache Kopien oft verwendet, um Neuankündigungen auszulösen und den Zustand zu aktualisieren, ohne das Original zu verändern.
Hier ist ein realistisches Beispiel:
function updateUserProfile(user, newName) {
// Erstelle eine flache Kopie des Benutzerobjekts
let updatedUser = Object.assign({}, user);
// Ändere den Namen
updatedUser.name = newName;
return updatedUser;
}
let user = {
name: "Alice",
age: 30,
address: {
city: "Wonderland",
street: "Rabbit Hole Lane"
}
};
let updatedUser = updateUserProfile(user, "Alicia");
console.log(user); // Ursprüngliches Benutzerobjekt unveraändert
console.log(updatedUser); // Neues Objekt mit aktualisiertem Namen
In diesem Beispiel aktualisieren wir den Namen des Benutzers, ohne das Originalobjekt zu verändern. Dies ist ein häufiges Muster in der Staatsverwaltung und hilft, Datenintegrität zu erhalten.
Fazit
Glückwunsch! Du hast deine ersten Schritte in die Welt der flachen Kopien in JavaScript gemacht. Behalte im Gedächtnis, dass flache Kopien wie das schnelle Fotografieren sind – sie sind schnell und effizient, aber sie erfassen nicht alles im Detail.
Während du deine JavaScript-Reise fortsetzt, wirst du viele Situationen finden, in denen flache Kopien nützlich sind. Es ist ein mächtiges Werkzeug in deinem Programmierwerkzeugkasten, besonders wenn du mit komplexen Datenstrukturen und Staatsverwaltung arbeitest.
Weiter üben, bleibe neugierig und fürchte dich nicht, zu experimentieren. Bereit dazu, wirst du wie ein Profi Objekte erstellen und manipulieren!
Fröhliches Coden und möge deine Kopien immer so flach (oder tief) sein, wie du sie haben möchtest! ?
Credits: Image by storyset