Meine Zusammenfassung eines Satzes: Der ursprüngliche Wert ändert den ursprünglichen Wert nicht, unabhängig davon, ob es sich um eine variable Zuordnung oder ein Funktionspass handelt. Unabhängig davon, ob es sich um eine variable Zuordnung oder ein Funktionspass handelt, wenn die neue Variable neu zugewiesen wird, wirkt sich nicht auf den ursprünglichen Referenzwert aus. Wenn die neue Variable ein direkter Betrieb ist, wirkt sich der ursprüngliche Referenzwert aus.
Zunächst ist klar, dass Werte und Typen zwei verschiedene Konzepte sind. Zum Beispiel ist NULL der eindeutige Wert des Null -Typs, undefinierter ist der eindeutige Wert des undefinierten Typs, und True und False sind die einzigen zwei Werte des Booleschen Typs usw. In jeder Sprache kann der Wert des Wertes in die folgenden 3 Aspekte zusammengefasst werden.
Wert kopieren: Weisen Sie den Wert einer neuen Variablen oder dem Wert einem anderen Variablen-, Attribut- oder Array -Element über die Variable zu.
VERTWAHREN: Das heißt, den Wert als Parameter an eine Funktion oder Methode zu übergeben.
Vergleichen Sie Werte: Vergleichen Sie den Wert mit einem anderen Wert, um festzustellen, ob er gleich ist.
Da die Werte von Werttypdaten und Referenzdaten unterschiedliche Formulare haben, sind die Methoden zur Natürlichen und die erzeugten Ergebnisse ebenfalls unterschiedlich. Beachten Sie, dass wir sie häufig als ursprünglicher Wert oder Grundwert nennen, wenn der Wert Wertstypsdaten ist. Wenn der Wert referenzierte Daten, nennen wir ihn häufig den referenzierten Wert oder den zusammengesetzten Wert.
1. Verwenden Sie Originalwerte
Für den ursprünglichen Wert werden die drei Ebenen seines Betriebs wie folgt erklärt.
1) Kopieren Sie den Wert
In der Zuweisungsanweisung erzeugt der Betriebsprozess eine Kopie des tatsächlichen Wertes. Es besteht keine Verbindung zwischen dem Wert der Kopie und dem tatsächlichen Wert. Sie befinden sich allein in verschiedenen Stapelbereichen oder Haufenflächen. Diese Kopie kann Variablen, Objekteigenschaften und Array -Elemente speichern. Zum Beispiel:
var n = 123, a, b = [], c = {}; a = n; // die Nummer 123 b [0] = n; // Kopieren Sie die Nummer 123 cx = n; // die Nummer 123 (a == b [0]) && (a == cx) && (b [0] == CX) && alert ("Die kopierten Werte sind gleich"); // Erkennung, dass ihre Werte gleich sindIm obigen Beispiel wird der Wert 123 3 Kopien in die Variable A, Array B bzw. Objekt C kopiert. Obwohl ihre Werte gleich sind, sind sie unabhängig voneinander.
2) den Wert bestehen
Wenn Sie einen Wert an eine Funktion oder Methode übergeben, ist der übergebene Wert nur eine Kopie, nicht der Wert selbst. Wenn Sie beispielsweise den bestandenen Wert in einer Funktion ändern, kann das Ergebnis nur die Kopie dieses Parameterwerts beeinflussen und den ursprünglichen Wert nicht beeinflussen.
var a = 123; // die ursprüngliche Wertfunktion f (x) {x = x + x; } f (a); // Rufen Sie die Funktion auf, um den übergebenen Wertalarm zu ändern (a); // Überprüfen Sie, ob der Wert der Variablen A betroffen ist. Der Rückgabewert beträgt 123, was darauf hinweist, dass es keine Änderung gibt3) Vergleichswert
Im obigen Beispiel können wir auch sehen, dass beim Vergleich der ursprünglichen Werte ein Byte-Byte-Vergleich durchgeführt wird, um festzustellen, ob sie gleich sind. Vergleich der Werte selbst, nicht der Ort, an dem sich die Werte befinden. Obwohl die Ergebnisse des Vergleichs gleich sein können, bedeutet dies nur, dass die von ihnen enthaltenen Byte -Informationen gleich sind.
2. Verwenden Sie Referenzwerte
Als Referenzwerte werden die drei Ebenen ihrer Operationen wie folgt erklärt.
1) Kopieren Sie den Wert
In der Zuweisungsanweisung ist der zugewiesene Wert ein Verweis auf den ursprünglichen Wert, weder die ursprüngliche Wertkopie noch den ursprünglichen Wert selbst. Das heißt, nachdem die Zuweisung durchgeführt wurde, spart die Variable Verweise auf den ursprünglichen Wert (dh die Speicheradresse des ursprünglichen Wertes). Wenn sie zwischen mehreren Variablen, Array -Elementen oder Objekteigenschaften kopiert werden, sind sie alle mit den von der ursprünglichen Variablen gespeicherten Referenzen überein.
Alle Referenzen haben den gleichen Effekt und die gleiche Funktion und können durchgeführt werden. Wenn die Daten über eine der Referenzen bearbeitet werden, wird diese Änderung im ursprünglichen Wert und anderen verwandten Referenzen widerspiegelt. Zum Beispiel:
var a = [1,2,3]; // Array -Referenz b = a; // Wert b [0] = 4; // den Wert des ersten Elements in der Variablen -B -Warnung ändern (a [0]); // Rückgabe 4 und anzeigen, dass der Wert des ersten Elements in der Variablen A ebenfalls auf 4 geändert wird
Wenn jedoch ein neuer Wert auf die Variable B zugewiesen wird, wirkt sich der neue Wert nicht auf den Inhalt des ursprünglichen Wertes aus. Zum Beispiel:
var a = [1,2,3]; // Array -Referenz b = a; // Wert kopieren b = 4; // den Zuordnungsalarm überschreiben (a [0]); // Der Inhalt der Variablen A bleibt unverändert
Wiederholte Zuordnungen überschreiben tatsächlich den Verweis einer Variablen auf den ursprünglichen Wert und werden zu einer Kopie eines anderen Wertes oder zu einem Verweis darauf. Daher beeinflusst es nicht den ursprünglichen Wert und das Demonstrationsdiagramm ist in Abbildung 4-2 dargestellt.
2) den Wert bestehen
Wenn eine Referenz verwendet wird, um Daten an eine Funktion zu übergeben, ist die an die Funktion übergebene Funktion auch eine Referenz auf den ursprünglichen Wert. Die Funktion kann diese Referenz verwenden, um den ursprünglichen Wert selbst zu ändern, und jede Änderung ist außerhalb der Funktion sichtbar. Zum Beispiel:
var a = [1,2,3]; Funktion f (x) {x [0] = 4; // Parameterwert in der Funktion} f (a) ändern; // den Referenzwert -Alarm bestehen (a [0]); // Rückgabe 4, der ursprüngliche Wert ändert sichBeachten Sie, dass das, was in der Funktion geändert wird, eine Referenz auf ein externes Objekt oder ein Array ist, nicht auf den Wert des Objekts oder des Arrays selbst. Sie können eine Referenz verwenden, um die Attribute eines Objekts oder die Elemente eines Arrays innerhalb der Funktion zu ändern. Wenn jedoch innerhalb der Funktion eine neue Referenz verwendet wird, um die ursprüngliche Referenz zu überschreiben, wirkt sich die Änderung innerhalb der Funktion nicht auf den Wert der ursprünglichen Referenz aus und kann nicht außerhalb der Funktion angezeigt werden.
var a = [1,2,3]; Funktion f (x) {x = 4; // Parameterwert in der Funktion} f (a) ändern; // den Referenzwert -Alarm bestehen (a [0]); // Rückgabe 1 ändert sich der ursprüngliche Wert nicht3) Vergleichswert
Beim Vergleich von zwei Referenzwerten werden die beiden Referenzadressen verglichen, um festzustellen, ob die ursprünglichen Werte, die sie Referenz sind, dieselbe Kopie sind und ob ihre ursprünglichen Werte gleichbytes sind. Bei Bezug auf zwei verschiedene Werte, obwohl sie dieselbe Bytezusammensetzung haben, sind die Werte der beiden Referenzen nicht gleich.
var a = neue Zahl (1); // Referenzwert a var b = neue Zahl (1); // Referenzwert b var c = a; // einen Verweis auf C -Alarm (a == b) zuweisen; // falsche Alarm zurückgeben (a == c); // true zurückgeben
Also, {} == {}, [] == [], alle geben falsch zurück. Weil die Referenzadresse unterschiedlich ist.
Kurz gesagt, für jede Sprache sind die Verwendung von Werten und die Verwendung von Referenzen zwei grundlegende Methoden der Datenmanipulation. Wenn wir Daten betreiben, sollte die Methode verwendet werden, um sie hauptsächlich von der Art der Daten zu bearbeiten. Der Werttyp und die Referenzdaten beteiligen sich an den Operationen. Werttypdaten arbeiten mit Daten mithilfe von Werten, während Referenzdaten unter Verwendung von Referenzen auf Daten arbeiten. Unterschiedliche Berechnungsmethoden erzeugen auch natürlich unterschiedliche Ergebnisse. Schauen wir uns ein anderes Beispiel an:
var s = "abc"; // String, Werttyp data var o = neue Zeichenfolge (s); // String -Objekt, Boxed String -Funktion f (v) {// Betriebsfunktion v.toString = function () {// Methode toString toString () return 123; }; } f (s); // die Wertalarme bestehen; // Die Zeichenfolge "ABC" zurückgibt, was darauf hinweist, dass der Vorgang die ursprünglichen Daten f (o) nicht beeinflusst hat. // die Referenzalarm (O) übergeben; // Geben Sie den Wert 123 zurück, was darauf hinweist, dass der Vorgang die interne Struktur der ursprünglichen Daten beeinflusst hatDer Werttyp beteiligt sich mit dem tatsächlichen Wert am Vorgang und hat daher keine direkte Verbindung zu den Originaldaten. Der Referenztyp beteiligt sich mit der Referenzadresse am Vorgang, und das Berechnungsergebnis beeinflusst den mit der Referenzadresse zugeordneten Datenblock der Heap -Fläche. Es gibt jedoch eine Ausnahme. Bei JavaScript -Zeichenfolgen sind seine Betriebsmethoden relativ kompliziert. Bitte google für Details!
Der obige Artikel JavaScript Data Operation_A kurze Diskussion über die Essenz des Betriebs der ursprünglichen Werte und der Referenzwerte ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.