Heim  >  Artikel  >  Web-Frontend  >  Über den Unterschied zwischen Basisdatentypen und Referenzdatentypen in js

Über den Unterschied zwischen Basisdatentypen und Referenzdatentypen in js

一个新手
一个新手Original
2017-10-24 09:20:081518Durchsuche

Stapel und Heap
Der Stapel ist ein automatisch zugewiesener Speicherplatz, der vom System automatisch freigegeben wird, während der Heap dynamisch Speicher zugewiesen wird. Seine Größe ist variabel und wird nicht automatisch freigegeben.

Grundtypen und Referenztypen

Grundtypen: Einfache Datensegmente werden im Stapelspeicher gespeichert, die Datengröße wird bestimmt und die Speicherplatzgröße kann zugewiesen werden.

Zu den grundlegenden Datentypen gehören Undefiniert, Null, Boolean, Zahl und String. Ihre Werte werden direkt auf dem Stapel gespeichert.

Referenztyp: der Wert des im Heapspeicher gespeicherten Objekts , dargestellt durch Der Adresszeiger besteht aus einem Wert. Die Adresse wird im Stapel gespeichert, und der tatsächliche Wert wird im Heap gespeichert. Die Größe jedes Speicherplatzes im Heap ist unterschiedlich und es werden je nach Situation spezifische Zuweisungen vorgenommen . Wenn wir auf den Wert eines Referenztyps (z. B. eines Objekts, Arrays, einer Funktion usw.) zugreifen müssen, erhalten wir zuerst den Adresszeiger des Objekts vom Stapel und dann die erforderlichen Daten aus dem Heap-Speicher


 var s='str',t= 0,floatNum=1.1;
    var obj={
        a:10,
        b:'Joel',
        c:function(){
            console.log('function');
        }
    }

js 基本数据类型引用数据类型内存分配

Wie oben gezeigt:

Grundlegende Datentypwerte werden im Stapel und im Objekt gespeichert Referenzen von Referenztypen werden im Stapel gespeichert.

Zusammenfassung

Unterschiedliche Speicherzuweisungen beim Deklarieren von Variablen:

Grundtypen: einfache Daten Segmente werden im Stapel gespeichert. Der Wert wird direkt an der Stelle gespeichert, an der auf die Variable zugegriffen wird. Dies liegt daran, dass der von Basistypen belegte Platz fest ist, sodass sie in einem kleineren Speicherbereich – dem Stapel – gespeichert werden können, sodass der Wert der Variablen schnell abgefragt werden kann.

Referenztyp: Im Heap gespeicherter Wert ist ein Zeiger (Punkt), der auf die Speicheradresse des gespeicherten Objekts zeigt ändern, sodass sie nicht auf dem Stapel platziert werden kann, da sonst die Geschwindigkeit der Variablensuche verringert wird. Im Gegensatz dazu ist der auf dem Stapel gespeicherte Wert die Adresse des Objekts und die Größe der Adresse ist fest, sodass das Speichern auf dem Stapel keinen Einfluss auf die Variablenleistung hat.

Unterschiedliche Speicherzuweisungsmechanismen bringen auch unterschiedliche Zugriffsmechanismen mit sich

In Javascript ist der direkte Zugriff auf im Heapspeicher gespeicherte Objekte nicht zulässig. Wenn Sie also auf ein Objekt zugreifen, greifen Sie zuerst auf den Speicherstapel zu, um das zu erhalten Adresse des Objekts im Speicherheap und dann dieser Adresse folgen, um den Wert im Objekt zu erhalten. Dies ist der legendäre Zugriff durch Referenz, während sich der Wert des Basistyps direkt im Speicherstapel befindet.

Unterschiede beim Kopieren von Variablen

Grundtypen: Wenn eine Variable, die den Originalwert enthält, in eine andere Variable kopiert wird, wird der neuen Variablen eine Kopie des Originalwerts zugewiesen zwei Die Variablen sind völlig unabhängig, sie haben nur den gleichen Wert.

Referenztyp: Wenn eine Variable, die die Speicheradresse eines Objekts enthält, in eine andere Variable kopiert wird, wird die Speicheradresse der neuen Variablen zugewiesen, was bedeutet, dass beide Variablen auf den Heap-Speicher verweisen -Objekt werden die von beiden vorgenommenen Änderungen im anderen widergespiegelt. (Hier muss man verstehen, dass beim Kopieren eines Objekts kein identisches Objekt im Heap-Speicher erstellt wird, sondern nur eine weitere Variable vorhanden ist, die den Zeiger auf das Objekt enthält.) Es gibt einen weiteren Zeiger.

Unterschiede bei der Parameterübergabe (dem Prozess des Kopierens tatsächlicher Parameter in formale Parameter)

Die Parameter aller Funktionen in ECMAScript werden als Wert übergeben, aber warum sind primitive Typen und Referenztypen beteiligt? Gibt es immer noch einen Unterschied, wenn der Wert von ? Das liegt nicht nur an der unterschiedlichen Speicherzuordnung.
Grundlegender Datentyp: Erstellen Sie einfach eine Kopie des Werts in der Variablen und übergeben Sie ihn an den Parameter. Danach haben der Parameter und die Variable keinen Einfluss mehr aufeinander.
Referenztyp: Da es sich bei dem übergebenen Wert um eine Speicheradresse handelt, verweisen sie alle auf dasselbe Objekt

Das obige ist der detaillierte Inhalt vonÜber den Unterschied zwischen Basisdatentypen und Referenzdatentypen in js. 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