Eine Variable kann zwei Arten von Werten speichern: primitive Werte und Referenzwerte.
ES6 hat einen neuen primitiven Datentyp eingeführt, Symbol, der einen eindeutigen Wert repräsentiert. Er ist der siebte Datentyp in der JavaScript-Sprache; die ersten sechs sind: Undefined, Null, Boolean, String, Number, Object.
Primitive Typen
Es gibt 6 primitive Datentypen in JavaScript: Undefined, Null, Boolean, Number, String, Symbol (neu in ES6)!
Konvention:Primitive Datentypen entsprechen primitiven Typen.
Auf Werte primitiver Datentypen wird per Wert zugegriffen.
-
Werte primitiver Typen sind unveränderlich.
var str = "123hello321"; str.toUpperCase(); // 123HELLO321 console.log(str); // 123hello321
-
Der Vergleich primitiver Typen ist der Vergleich ihrer Werte.
var a = 1; var b = true; console.log(a == b); // true console.log(a === b); // false
Oben haben a und b unterschiedliche Datentypen, aber sie können trotzdem per Wert verglichen werden, da vor dem Vergleich automatisch eine implizite Typkonvertierung durchgeführt wird.
== : vergleicht nur Werte
=== : vergleicht nicht nur Werte, sondern auch Datentypen
-
Variablen primitiver Typen werden im Stack-Speicher (Stack) gespeichert.
var a,b; a = "zyj"; b = a; console.log(a); // zyj console.log(b); // zyj a = "呵呵"; // 改变 a 的值,并不影响 b 的值 console.log(a); // 呵呵 console.log(b); // zyj
Diagramm wie folgt: Der Stack-Speicher enthält den Variablenbezeichner und den Variablenwert.
Referenztypen
Abgesehen von den 6 oben genannten primitiven Datentypen sind die übrigen Referenztypen, die zusammen als Objekttyp bezeichnet werden. Im Einzelnen umfassen sie: Objekttyp, Array-Typ, Date-Typ, RegExp-Typ, Function-Typ usw.
Auf Werte von Referenztypen wird per Referenz zugegriffen.
-
Werte von Referenztypen sind veränderlich.
var obj = {name:"zyj"}; // 创建一个对象 obj.name = "percy"; // 改变 name 属性的值 obj.age = 21; // 添加 age 属性 obj.giveMeAll = function(){ return this.name + " : " + this.age; }; // 添加 giveMeAll 方法 obj.giveMeAll(); -
Der Vergleich von Referenztypen ist der Vergleich von Referenzen.
var obj1 = {}; // 新建一个空对象 obj1 var obj2 = {}; // 新建一个空对象 obj2 console.log(obj1 == obj2); // false console.log(obj1 === obj2); // falseDa obj1 und obj2 auf zwei verschiedene, im Heap-Speicher gespeicherte Objekte verweisen, sind auch die Werte (Referenzadressen) der Variablen obj1 und obj2 unterschiedlich!
-
Werte von Referenztypen sind Objekte (Object), die im Heap-Speicher (Heap) gespeichert sind.
Anders als in anderen Programmiersprachen kann JavaScript nicht direkt auf den Speicherbereich (Heap-Speicher) von Objekten zugreifen.var a = {name:"percy"}; var b; b = a; a.name = "zyj"; console.log(b.name); // zyj b.age = 22; console.log(a.age); // 22 var c = { name: "zyj", age: 22 };
Diagramm wie folgt:
Der Stack-Speicher speichert die Variablenkennung und einen Zeiger auf das Objekt im Heap-Speicher.
Der Heap-Speicher speichert den Inhalt des Objekts.
Typen erkennen
-
typeofwird häufig verwendet, um zu erkennen, ob eine Variable der grundlegendste Datentyp ist
var a; typeof a; // undefined a = null; typeof a; // object a = true; typeof a; // boolean a = 666; typeof a; // number a = "hello"; typeof a; // string a = Symbol(); typeof a; // symbol a = function(){} typeof a; // function a = []; typeof a; // object a = {}; typeof a; // object a = /aaa/g; typeof a; // object -
instanceofwird verwendet, um festzustellen, ob das Objekt, auf das die prototype-Eigenschaft eines Konstruktors verweist, in der Prototypenkette eines anderen zu prüfenden Objekts vorhanden ist
Einfach ausgedrückt dient es dazu, festzustellen, ob eine Variable eines Referenztyps ein Objekt eines bestimmten Typs ist.
({}) instanceof Object // true ([]) instanceof Array // true (/aa/g) instanceof RegExp // true (function(){}) instanceof Function // true
Originaladresse: https://segmentfault.com/a/1190000006752076