Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der js-Datentypen

Detaillierte Erläuterung der js-Datentypen

小云云
小云云Original
2018-03-22 17:22:511238Durchsuche

Einfache ES5-Datentypen (auch Basisdatentypen genannt): Undefiniert, Null, Boolean, Zahl und Zeichenfolge. Es gibt auch einen komplexen Datentyp – Objekt. Objekt besteht im Wesentlichen aus einer Menge ungeordneter Name-Wert-Paare. ECMAScript unterstützt keinen Mechanismus zum Erstellen benutzerdefinierter Typen und alle Werte sind letztendlich einer der sechs oben genannten Datentypen.

1. Typeof-Operator – erkennt den Datentyp einer bestimmten Variablen
Die Verwendung des Typeof-Operators für einen Wert kann eine der folgenden Zeichenfolgen zurückgeben:
„undefiniert“ – wenn der Wert keine Definition ist ;
„boolean“ – wenn der Wert ein boolescher Wert ist;
„number“ – wenn der Wert ein numerischer Wert ist; " – wenn dieser Wert ein Objekt oder null ist;
„Funktion“ – wenn dieser Wert eine Funktion ist.
Im Folgenden finden Sie einige Beispiele für die Verwendung des Operators typeof:
var message = "some string"
alert(typeof message)
alert(typeof(message)); // "string"
alert(typeof 95); // "number"
Diese Beispiele veranschaulichen, dass der Operand des typeof-Operators eine Variable oder ein numerisches Literal sein kann. Beachten Sie, dass es sich bei „typeof“ um einen Operator und nicht um eine Funktion handelt. Daher sind die Klammern im Beispiel nicht erforderlich, können aber verwendet werden.


Manchmal gibt der Typoperator verwirrende, aber technisch korrekte Werte zurück. Der Aufruf von typeof null gibt beispielsweise „object“ zurück, da der Sonderwert null als leere Objektreferenz betrachtet wird. Safari 5 und früher sowie Chrome 7 und früher geben „Funktion“ zurück, wenn der Operator „typeof“ für einen regulären Ausdruck aufgerufen wird, während andere Browser in diesem Fall „Objekt“ zurückgeben. Technisch gesehen sind Funktionen in ECMAScript Objekte, kein Datentyp. Allerdings haben Funktionen einige besondere Eigenschaften, daher ist es notwendig, Funktionen durch den Typ des Operators von anderen Objekten zu unterscheiden.

2.1 undefinierter Typ


undefinierter Typ hat nur einen Wert, nämlich den speziellen undefinierten. Dieser Wert wurde eingeführt, um einen Nullobjektzeiger formal von einer nicht initialisierten Variablen zu unterscheiden. Für Variablen, die noch nicht deklariert wurden, kann nur eine Operation ausgeführt werden, nämlich die Verwendung des Typeof-Operators zum Erkennen ihres Datentyps. Schauen Sie sich das folgende Beispiel an:


var message; // Nachdem diese Variable deklariert wurde, hat sie standardmäßig einen undefinierten Wert

alert(typeof message); // "undefiniert"

alert(typeof age); // "undefiniert"
Die Ergebnisse zeigen, dass die Ausführung des typeof-Operators auf nicht initialisierte und nicht deklarierte Variablen einen undefinierten Wert zurückgibt. Denn obwohl sich die beiden Variablen aus technischer Sicht grundsätzlich unterscheiden, ist es tatsächlich unmöglich, echte Operationen an einer der beiden Variablen durchzuführen.

2.2 Nulltyp


Der Nulltyp ist ein Datentyp mit nur einem Wert, und dieser spezielle Wert ist null. Aus logischer Sicht stellt ein Nullwert einen Nullobjektzeiger dar, weshalb „Objekt“ zurückgegeben wird, wenn der Operator „typeof“ zum Erkennen eines Nullwerts verwendet wird.

Wenn die definierte Variable in Zukunft zum Halten eines Objekts verwendet werden soll, ist es am besten, die Variable auf Null und nicht auf einen anderen Wert zu initialisieren.

Tatsächlich wird der undefinierte Wert vom Nullwert abgeleitet, daher schreibt ECMA-262 vor, dass ihr Gleichheitstest „true“ zurückgeben soll:
alert(null == undefined); //true
Hier befindet sich The Der Gleichheitsoperator (==) zwischen null und undefiniert gibt immer „true“ zurück. Beachten Sie jedoch, dass dieser Operator seine Operanden zu Vergleichszwecken konvertiert.


Obwohl null und undefiniert diese Beziehung haben, sind ihre Verwendungen völlig unterschiedlich. Unter keinen Umständen ist es notwendig, den Wert einer Variablen explizit auf undefiniert zu setzen, aber die gleiche Regel gilt nicht für null. Mit anderen Worten: Solange eine Variable, die ein Objekt enthalten soll, nicht tatsächlich ein Objekt enthält, sollten Sie die Variable explizit einen Nullwert enthalten lassen. Dies spiegelt nicht nur die Konvention von null als Nullobjektzeiger wider, sondern hilft auch dabei, null und undefiniert besser zu unterscheiden.

2.3 boolescher Typ


Der boolesche Typ hat nur zwei Literalwerte: wahr und falsch, bei denen die Groß-/Kleinschreibung beachtet wird.


In „falsch“ konvertierte Werte: false , „“ (leerer String), 0 und NaN , null , undefiniert

2.4 Zahlentyp


Zahlentyp: Ganzzahl- und Gleitkommawerte.

Da das Speichern eines Gleitkommawerts doppelt so viel Speicherplatz erfordert wie das Speichern eines ganzzahligen Werts, konvertiert ECMAScript den Gleitkommawert ohne Verlust von Möglichkeiten in einen ganzzahligen Wert. Wenn dem Dezimalpunkt keine Ziffern folgen, kann der Wert natürlich als Ganzzahlwert gespeichert werden.

var floatNum1 = 1.; // Keine Nachkommastellen – geparst als 1
var floatNum2 = 10.0; // Ganzzahl – geparst als 10
Die höchste Genauigkeit von Gleitkommawerten ist 17 Dezimalstellen, aber ihre Genauigkeit bei arithmetischen Berechnungen ist weitaus geringer als die von ganzen Zahlen.


In Bezug auf das Problem der Rundungsfehler, die durch numerische Gleitkommaberechnungen verursacht werden, muss eines klar sein: Dies ist ein häufiges Problem bei der Verwendung von Gleitkommaberechnungen, die auf numerischen IEEE754-Werten basieren, und ECMAScript ist es nicht eindeutig; auch andere Formatsprachen haben dieses Problem.

Die Funktion isFinite() kann bestimmen, ob ein Wert endlich ist (ob er zwischen dem Minimal- und Maximalwert liegt). Diese Funktion gibt „true“ zurück, wenn das Argument zwischen dem Minimal- und Maximalwert liegt.

NaN, also Not a Number (Not a Number), ist ein besonderer Wert. Dieser Wert wird verwendet, um anzuzeigen, dass ein Operand, der einen Wert zurückgeben sollte, keinen Wert zurückgibt (sodass kein Fehler auftritt). wird geworfen). In ECMAScript gibt beispielsweise die Division einer beliebigen Zahl durch 0 NaN zurück und hat daher keinen Einfluss auf die Ausführung anderen Codes. NaN selbst weist zwei ungewöhnliche Eigenschaften auf. Erstens gibt jede Operation mit NaN (z. B. NaN/10) NaN zurück, was bei mehrstufigen Berechnungen zu Problemen führen kann. Zweitens ist NaN keinem Wert gleich, auch nicht NaN selbst. Der folgende Code gibt beispielsweise false zurück: warning(NaN == NaN); //false
isNaN() Nach dem Empfang eines Werts wird versucht, den Wert in einen numerischen Wert umzuwandeln. Einige Werte, die nicht numerisch sind, werden direkt in numerische Werte umgewandelt, beispielsweise die Zeichenfolge „10“ oder ein boolescher Wert. Jeder Wert, der nicht in einen numerischen Wert konvertiert werden kann, führt dazu, dass diese Funktion „true“ zurückgibt. Bitte sehen Sie sich das folgende Beispiel an:
alert(isNaN(NaN)); //true Alert(isNaN("10")); //false (kann in den Wert 10 konvertiert werden)
alert(isNaN(" blue ")); //true (kann nicht in einen numerischen Wert konvertiert werden) warning(isNaN(true)); //false (kann in einen numerischen Wert konvertiert werden 1)

isNaN() gilt auch für Gegenstände. Wenn die Funktion isNaN() basierend auf einem Objekt aufgerufen wird, wird zuerst die Methode valueOf() des Objekts aufgerufen und dann bestimmt, ob der von der Methode zurückgegebene Wert in einen numerischen Wert konvertiert werden kann. Wenn nicht, rufen Sie die toString()-Methode basierend auf diesem Rückgabewert auf und testen Sie dann den Rückgabewert. Dieser Prozess ist auch der allgemeine Ausführungsablauf integrierter Funktionen und Operatoren in ECMAScript.

Numerische Konvertierung: Es gibt 3 Funktionen, die nicht numerische Werte in numerische Werte konvertieren können: Number(), parseInt() und parseFloat().
Die Konvertierungsfunktion Number() kann für jeden Datentyp verwendet werden, während die anderen beiden Funktionen speziell zum Konvertieren von Zeichenfolgen in numerische Werte verwendet werden. Diese drei Funktionen geben unterschiedliche Ergebnisse für dieselbe Eingabe zurück.
Die Konvertierungsregeln der Funktion Number() lauten wie folgt:
 Wenn es sich um einen booleschen Wert handelt, werden true und false in 1 bzw. 0 konvertiert.
 Handelt es sich um einen numerischen Wert, wird dieser einfach übergeben und zurückgegeben.
 Wenn es sich um einen Nullwert handelt, geben Sie 0 zurück.
 Wenn es undefiniert ist, geben Sie NaN zurück.
 Wenn es sich um eine Zeichenfolge handelt, befolgen Sie die folgenden Regeln:
 Wenn die Zeichenfolge nur Zahlen enthält (einschließlich solcher, denen ein positives oder negatives Vorzeichen vorangestellt ist), wird sie in einen Dezimalwert umgewandelt, d. h. „ 1“ wird zu 1, „123“ wird zu 123 und „011“ wird zu 11 (Hinweis: führende Nullen werden ignoriert);
 Wenn die Zeichenfolge ein gültiges Gleitkommaformat wie „1.1“ enthält, dann Konvertieren Sie ihn in den entsprechenden Gleitkommawert (auch führende Nullen werden ignoriert);
 Wenn die Zeichenfolge ein gültiges Hexadezimalformat enthält, z. B. „0xf“, dann konvertieren Sie sie in den dezimalen Ganzzahlwert
 Wenn die Zeichenfolge leer ist (keine Zeichen enthält), wird sie in 0 konvertiert.
 Wenn die Zeichenfolge andere Zeichen als das oben genannte Format enthält, wird sie in NaN konvertiert.
 Wenn es sich um ein Objekt handelt, rufen Sie die valueOf()-Methode des Objekts auf und konvertieren Sie dann den zurückgegebenen Wert gemäß den vorherigen Regeln. Wenn das Ergebnis der Konvertierung NaN ist, rufen Sie die toString()-Methode des Objekts auf und konvertieren Sie dann den zurückgegebenen String-Wert erneut gemäß den vorherigen Regeln.
Lassen Sie uns im Folgenden einige konkrete Beispiele nennen.
var num1 = Number("Hallo Welt!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); 🎜>var num4 = Number(true); //1
Die Funktion parseInt() wird häufiger beim Umgang mit ganzen Zahlen verwendet. Wenn die Funktion parseInt() eine Zeichenfolge konvertiert, ignoriert sie Leerzeichen vor der Zeichenfolge, bis sie das erste Nicht-Leerzeichen findet. Wenn das erste Zeichen kein numerisches Zeichen oder ein negatives Vorzeichen ist, gibt parseInt() NaN zurück, d. h. die Verwendung von parseInt() zum Konvertieren einer leeren Zeichenfolge gibt NaN zurück (Number() gibt 0 für Nullzeichen zurück). Wenn das erste Zeichen ein numerisches Zeichen ist, analysiert parseInt() das zweite Zeichen weiter, bis alle nachfolgenden Zeichen analysiert wurden oder ein nicht numerisches Zeichen gefunden wird. Beispielsweise wird „1234blue“ in 1234 umgewandelt, da „blue“ vollständig ignoriert wird. Ebenso wird „22,5“ in 22 umgewandelt, da der Dezimalpunkt kein gültiges numerisches Zeichen ist.
Wenn das erste Zeichen in der Zeichenfolge ein numerisches Zeichen ist, kann parseInt() auch verschiedene Ganzzahlformate erkennen. Wenn die Zeichenfolge mit „0x“ beginnt und von numerischen Zeichen gefolgt wird, wird sie als hexadezimale Ganzzahl interpretiert. Wenn die Zeichenfolge mit „0“ beginnt und von numerischen Zeichen gefolgt wird, wird sie als Oktalzahl interpretiert.
Um die Konvertierungsregeln der parseInt()-Funktion besser zu verstehen, sind unten einige Beispiele aufgeführt:
var num1 = parseInt("1234blue"); // 1234 var num2 = parseInt("" / / NaN
var num3 = parseInt("0xA"); // 10 (hexadezimale Zahl) var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); Oktalzahl) var num6 = parseInt("70"); // 70 (Dezimalzahl)
var num7 = parseInt("0xf"); // 15 (Hexadezimalzahl)
var num = parseInt("070 ");//In der ES5-JavaScript-Engine ist parseInt() nicht mehr in der Lage, Oktalwerte zu analysieren
Die Funktion parseInt() stellt den zweiten Parameter bereit: die für die Konvertierung verwendete Basis (d. h. welche Basis).
var num = parseInt("0xAF", 16); //175 var num1 = parseInt("AF", 16); //175
Wenn 16 als zweiter Parameter angegeben ist, kann die Zeichenfolge With sein führendes „0x“.
Ähnlich wie die Funktion parseInt() analysiert auch parseFloat() jedes Zeichen beginnend mit dem ersten Zeichen (Position 0). Und es wird bis zum Ende der Zeichenfolge analysiert oder bis ein ungültiges numerisches Gleitkommazeichen gefunden wird. Das heißt, der erste Dezimalpunkt in der Zeichenfolge ist gültig, der zweite Dezimalpunkt jedoch ungültig, sodass die darauf folgende Zeichenfolge ignoriert wird. „22.34.5“ wird in 22.34 umgewandelt.
Zusätzlich zum gültigen ersten Dezimalpunkt besteht der zweite Unterschied zwischen parseFloat() und parseInt() darin, dass führende Nullen immer ignoriert werden. parseFloat() erkennt alle zuvor besprochenen Gleitkomma-Zahlenformate, einschließlich dezimaler Ganzzahlformate. Zeichenfolgen im Hexadezimalformat werden jedoch immer in 0 konvertiert. Da parseFloat() nur Dezimalwerte analysiert, ist es nicht sinnvoll, die Basis mit dem zweiten Argument anzugeben. Eine letzte Sache, die Sie beachten sollten: Wenn die Zeichenfolge eine Zahl enthält, die als Ganzzahl geparst werden kann (kein Dezimalpunkt oder nur Nullen nach dem Dezimalpunkt), gibt parseFloat() eine Ganzzahl zurück. Im Folgenden finden Sie einige typische Beispiele für die Verwendung von parseFloat() zum Konvertieren numerischer Werte.
var num1 = parseFloat("1234blue"); //1234 (integer) var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5 var num6 = parseFloat("3.125e7"); //31250000

2.5 String-Typ

Strings in ECMAScript sind unveränderlich Das heißt, sobald Zeichenfolgen erstellt wurden, können ihre Werte nicht mehr geändert werden. Zum Beispiel:
var lang = "Java";
lang = lang + "Script";
Die Variable lang im obigen Beispiel enthält zunächst die Zeichenfolge „Java“. Die zweite Codezeile definiert den Wert von lang in „JavaScript“ um. Der Prozess zur Implementierung dieser Operation ist wie folgt: Erstellen Sie zunächst eine neue Zeichenfolge, die 10 Zeichen enthalten kann, füllen Sie diese Zeichenfolge dann mit „Java“ und „Script“ und zerstören Sie im letzten Schritt die ursprüngliche Zeichenfolge „Java“ und „String“. „Skript“, da diese beiden Zeichenfolgen nicht mehr nützlich sind.
var age = 11; var ageAsString = age.toString(); // String "11"
varfound = true; varfoundAsString =found.toString(); // String "true"
Numerisch , Boolesche, Objekt- und String-Werte (ja, jeder String hat auch eine toString()-Methode, die eine Kopie des Strings zurückgibt) haben alle toString()-Methoden. Aber Null- und undefinierte Werte verfügen nicht über diese Methode.
Wenn Sie nicht wissen, ob der zu konvertierende Wert null oder undefiniert ist, können Sie auch die Konvertierungsfunktion String() verwenden. Diese Funktion kann jeden Werttyp in einen String konvertieren. Die String()-Funktion folgt den folgenden Konvertierungsregeln:
 Wenn der Wert eine toString()-Methode hat, rufen Sie die Methode auf (ohne Parameter) und geben Sie das entsprechende Ergebnis zurück
 Wenn der Wert null ist, geben Sie „ zurück; null";
 Wenn der Wert undefiniert ist, geben Sie „undefiniert“ zurück.
Da null und undefiniert keine toString()-Methode haben, gibt die String()-Funktion die Literalwerte dieser beiden Werte zurück.
Tipp: Um einen Wert in eine Zeichenfolge umzuwandeln, können Sie den Plus-Operator verwenden, um ihn zu einer Zeichenfolge ("") hinzuzufügen.

2.6 Objekttyp

Objekte in ECMAScript sind eigentlich eine Sammlung von Daten und Funktionen. Erstellt von: var o = new Object();
Jede Instanz von Object verfügt über die folgenden Eigenschaften und Methoden.
 Konstruktor: Speichert die Funktion, die zum Erstellen des aktuellen Objekts verwendet wurde. Für das vorherige Beispiel ist der Konstruktor Object().
 hasOwnProperty(propertyName): Wird verwendet, um zu überprüfen, ob die angegebene Eigenschaft in der aktuellen Objektinstanz vorhanden ist. Darunter muss der Eigenschaftsname (propertyName) als Parameter in Form einer Zeichenfolge angegeben werden (zum Beispiel: o.hasOwnProperty("name")).
 isPrototypeOf(object): Wird verwendet, um zu überprüfen, ob das eingehende Objekt der Prototyp des eingehenden Objekts ist.
 propertyIsEnumerable(propertyName): Wird verwendet, um zu prüfen, ob eine bestimmte Eigenschaft mithilfe einer for-in-Anweisung aufgezählt werden kann. Wie bei der Methode hasOwnProperty() muss der Eigenschaftsname als Parameter in Stringform angegeben werden.
 toLocaleString(): Gibt die Zeichenfolgendarstellung des Objekts zurück, die der Region der Ausführungsumgebung entspricht.
 toString(): Gibt die String-Darstellung des Objekts zurück.
 valueOf(): Gibt die Zeichenfolge, die numerische oder die boolesche Darstellung des Objekts zurück. Normalerweise identisch mit dem Rückgabewert der toString()-Methode.
Da Object die Basis aller Objekte in ECMAScript ist, verfügen alle Objekte über diese grundlegenden Eigenschaften und Methoden.

Technisch gesehen gilt das Verhalten von Objekten in ECMA-262 nicht unbedingt für andere Objekte in JavaScript. Objekte in der Browserumgebung, beispielsweise Objekte im BOM und DOM, sind Hostobjekte, da sie von der Hostimplementierung bereitgestellt und definiert werden. ECMA-262 ist nicht für die Definition von Hostobjekten verantwortlich, daher können Hostobjekte von Object erben oder auch nicht.

3. Hinweis

(1) Wenn ein Operand mit NaN verglichen wird, ist das Ergebnis falsch.
(2) null == undefiniert gibt „true“ zurück, weil es sich um ähnliche Werte handelt; null === undefiniert gibt jedoch „false“ zurück, weil es sich um unterschiedliche Wertetypen handelt.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der js-Datentypen. 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