Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung, wie JS-Originalwerte und Referenzwerte gespeichert werden

Detaillierte Erklärung, wie JS-Originalwerte und Referenzwerte gespeichert werden

小云云
小云云Original
2018-03-26 09:09:581149Durchsuche

In diesem Artikel werden hauptsächlich die Speichermethoden von JS-Originalwerten und -Referenzwerten erläutert. Der Originalwert bezieht sich auf den Wert, der den Originaldatentyp darstellt, der auch als Basisdatentyp bezeichnet wird, und auf den Referenzwert bezieht sich auf den Wert des zusammengesetzten Datentyps. Als nächstes werde ich Ihnen anhand von Beispielcode vorstellen, wie Sie Originalwerte und Referenzwerte in JS speichern. Interessierte Freunde sollten einen Blick darauf werfen.

In ECMAscript können Variablen zwei Arten von Werten speichern, nämlich primitive Werte und Referenzwerte

  • Primitive Werte beziehen sich auf Werte, die darstellen primitive Datentypen, auch Basisdatentypen genannt, einschließlich: Number, Stirng, Boolean, Null, Underfined

  • Referenzwerte beziehen sich auf Werte zusammengesetzter Datentypen, einschließlich: Object , Funktion, Array, Datum, RegExp

Abhängig von den verschiedenen Datentypen werden einige Variablen im Stapel und andere im Heap gespeichert. Die spezifischen Unterschiede sind wie folgt:

Originalvariablen und ihre Werte werden im Stapel gespeichert. Bei der Übergabe einer Originalvariablen an eine andere Originalvariable wird der Inhalt eines Stapelraums in einen anderen Stapelraum kopiert Dies Die beiden ursprünglichen Variablen haben keinen Einfluss aufeinander.

Der Referenzwert speichert den Namen der Referenzvariablen auf dem Stapel, speichert jedoch ihr tatsächliches Objekt im Heap, und es gibt einen Zeiger, der vom Variablennamen auf das tatsächlich im Heap gespeicherte Objekt zeigt Wenn Sie eine andere Variable angeben, wird ein Referenzobjekt übergeben. Zu diesem Zeitpunkt verweisen beide auf dieselben Daten, wenn der Wert einer Variablen durch eine Methode geändert wird , wird sich auch sein Wert ändern; wenn dies jedoch nicht durch eine Methode, sondern durch eine Neuzuweisung erfolgt, entspricht dies dem erneuten Öffnen eines Raums und der ursprüngliche Zeiger des Werts ändert sich, dann ändert sich der andere Wert nicht.

Sehen Sie sich das Beispiel an:


var a="hello";
var b=a;
a="world";
alert(a);//world
alert(b);//hello
var arr=[1,3];
arr1=arr;
arr.push(5);
alert(arr)//1,3,5
alert(arr1);//1,3,5
arr=[7,8];
alert(arr);//7,8
alert(arr1);//1,3,5

Verwenden Sie ein Diagramm, um das Ergebnis wie folgt darzustellen:

Die Werte von Die ursprünglichen Variablen beeinflussen sich nicht gegenseitig und die Referenzvariablen arr und arr1 verweisen auf dasselbe Objekt. Wenn also der Wert von arr über eine Methode geändert wird (die Daten im Heap-Raum ändern sich), wenn auf die Daten von arr1 zugegriffen wird, das geänderte Objekt


Wenn der Wert einer Referenzvariablen durch Nichtmethoden geändert wird, wird ein Heap-Raum für die Referenzvariable und den Zeiger neu erstellt ändert sich auch:

Zusammenfassung:

Number, Stirng, Boolean, Null, Underfined und andere Bei grundlegenden Datentypen werden ihre Werte direkt auf dem Stapel gespeichert. Referenztypen wie Objekt, Funktion, Array, Datum und RegExp haben ihre Referenzvariablen im Stapel gespeichert und verweisen auf die tatsächlich gespeicherten Objekte im Heap durch Zeiger

Verwandte Empfehlungen:

JavaScript-Methode valueOf(), die den ursprünglichen Wert eines booleschen Objekts zurückgibt

Verstehen von JavaScript-Originalwerten und zusammengesetzten Werten

JavaScript Primitive und komplexe Werte_Javascript-Tipps

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie JS-Originalwerte und Referenzwerte gespeichert werden. 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