Bevor Sie verstehen, was flache Kopie und tiefe Kopie sind, müssen Sie zunächst die Speichereigenschaften von Werttypen und Referenztypen in JavaScript verstehen.
1. Es gibt zwei Arten von Werttypen:
Grundlegende Datentypen: Zeichenfolge, Zahl, Boolescher Wert, Undefiniert, Null
Zusammengesetzte Datentypen: Array, Objekt, Funktion, Datum, RegExp. .
2. Zuweisung
```2.1 Beispiel für die grundlegende Datentypzuweisung
var num = 123; var num2 = num;
"
* Die Speichereigenschaften der Werttypzuweisung, alle Daten in die Variable Erstellen Sie eine Kopie und speichern Sie sie in der neuen Variablen.
* `var num = 123` bedeutet, dass die in der Variablen gespeicherte Zahl 123 ist.
* Kopieren Sie dann die Daten, dh kopieren Sie 123. Dann im Speicher Es gibt 2 Datenstücke
* Weisen Sie die kopierten Daten „num2“ zu. Änderungen am Variablenwert von num2 haben keinen Einfluss auf den Variablenwert von num
* Sein Merkmal ist, dass es **zwei gibt Kopien von Daten** im Speicher.
"2.2 Beispiel für die Zuweisung zusammengesetzter Datentypen
var o = { name: '张三' }; var obj = o;
"
* Die Zuweisung besteht darin, die in gespeicherten Daten zu kopieren Variable o und weisen Sie dann die Daten zu Geben Sie obj
* Das Merkmal ist, dass sich nur eine Kopie der Daten im Speicher befindet und die Namensattributwerte von Objekt o und Objekt obj auf dieselbe Adresse verweisen
* Problem: Das Ändern des Namensattributs im Objekt obj wirkt sich auf den Wert aus, der dem Namensattribut entspricht.
Dann stellt sich die Frage, wie ein zusammengesetzter Datentyp einem anderen Objekt einen Wert zuweisen kann Beeinflusst es seinen eigenen Wert, wenn ein anderes Objekt den Wert ändert? 🎜>Lassen Sie mich über mein Verständnis von Deep Copy und Shallow Copy sprechen:
# Deep Copy und Shallow Copy
1 , was ist flache Kopie?
Flache Kopie: *Kopiert nur die Attribute des aktuellen Objekts.
Kopierte Objektattribute
Deep Copy: * Alle Referenzstrukturen der Daten des aktuellen Objekts werden kopiert und die Daten sind unabhängig im Speicher. Änderungen wirken sich nicht auf die kopierten Objekteigenschaften aus
2 Implementieren Sie Deep Copy-Code Kapselung
Testbeispiel:
var deepCopy = function () { // 1, 创建一个对象 var temp = {}; // 2, 拷贝属性, 判断如果是引用类型需要深拷贝 for ( var k in this ) { if ( typeof this[ k ] === 'object' ) { temp[ k ] = this[ k ].deepCopy(); } else { temp[ k ] = this[ k ]; } // temp[ k ] = this[ k ]; } // 3, 返回对象 return temp; };
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen flacher und tiefer Kopie in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!