ECMAScript-Originaltyp

ECMAScript hat 5 primitiven Typen (primitive type), nämlich Undefined, Null, Boolean, Number und String.

Operator typeof

Der Operator typeof hat einen Parameter, nämlich die Variable oder den Wert, der überprüft werden soll. Zum Beispiel:

var sTemp = "test string";
alert (typeof sTemp);    // Ausgabe "string"
alert (typeof 86);    // Ausgabe "number"

Wenn der Operator typeof auf eine Variable oder einen Wert angewendet wird, gibt er einen der folgenden Werte zurück:

  • undefined - wenn eine Variable den Typ Undefined hat
  • boolean - wenn eine Variable den Typ Boolean hat
  • number - wenn eine Variable den Typ Number hat
  • string - wenn eine Variable den Typ String hat
  • object - wenn eine Variable ein Referenztyp oder ein Null-Typ ist

Anmerkung:Sie könnten sich fragen, warum der Operator typeof für den Wert null "Object" zurückgibt. Dies ist ein Fehler in der ursprünglichen Implementierung von JavaScript, der von ECMAScript übernommen wurde. Heute wird null als Platzhalter für Objekte betrachtet, was diesen Widerspruch erklärt, aber technisch gesehen ist es immer noch ein primitiver Wert.

Typ Undefined

Wie bereits erwähnt, hat der Typ Undefined nur einen Wert, nämlich undefined. Wenn eine Variable nicht initialisiert wird, ist ihr Standardwert undefined.

var oTemp;

Die obige Zeile deklariert die Variable oTemp ohne Initialwert. Diese Variable wird den Wert 'undefined' zugewiesen, also dem Literal des Typs 'undefined'. Man kann den folgenden Codeabschnitt verwenden, um zu testen, ob der Wert der Variable 'undefined' ist:}}

var oTemp;
alert(oTemp == undefined);

Dieses Codebeispiel zeigt "true", was bedeutet, dass diese beiden Werte tatsächlich gleich sind. Man kann auch den Operator 'typeof' verwenden, um den Wert der Variable als 'undefined' anzuzeigen:

var oTemp;
alert(typeof oTemp); // Ausgabe "undefined"

Hinweis:Der Wert 'undefined' ist nicht gleich dem nicht definierten Wert. Der Operator 'typeof' unterscheidet jedoch nicht wirklich zwischen diesen beiden Werten. Betrachten wir das folgende Codebeispiel:

var oTemp;
alert(typeof oTemp);  // Ausgabe "undefined"
alert(typeof oTemp2);  // Ausgabe "undefined"

Der obige Code gibt für beide Variablen "undefined" aus, selbst wenn nur die Variable oTemp2 nicht deklariert wurde. Wenn ein anderer Operator als 'typeof' auf oTemp2 angewendet wird, wird ein Fehler verursacht, da andere Operatoren nur für deklarierte Variablen verwendet werden können.

Beispielsweise führt das folgende Codebeispiel einen Fehler aus:

var oTemp;
alert(oTemp2 == undefined);

Wenn eine Funktion keinen expliziten Rückgabewert hat, wird auch der Wert "undefined" zurückgegeben, wie folgt gezeigt:

function testFunc() {
{}
alert(testFunc() == undefined);  // Ausgabe "true"

Typ Null

Ein weiterer Typ mit nur einem Wert ist Null, der nur einen spezifischen Wert 'null' hat, also sein Literal. Der Wert 'undefined' wird tatsächlich vom Wert 'null' abgeleitet, daher definiert ECMAScript sie als gleich.

alert(null == undefined);  // Ausgabe "true"

Obwohl diese beiden Werte gleich sind, haben sie unterschiedliche Bedeutungen. 'undefined' ist der Wert, der einer Variablen zugewiesen wird, wenn sie deklariert, aber nicht initialisiert wird, während 'null' verwendet wird, um anzuzeigen, dass ein Objekt noch nicht existiert (dies wurde bei der Diskussion über den Operator 'typeof' kurz erwähnt). Wenn eine Funktion oder ein Verfahren ein Objekt zurückgeben soll und das Objekt nicht gefunden wird, wird in der Regel 'null' zurückgegeben.

Typ Boolean

Der Typ Boolean ist einer der häufigsten Typen in ECMAScript. Er hat zwei Werte true und false (also zwei Boolean-Literalen).

Obwohl false nicht gleich 0 ist, kann 0 bei Bedarf in false umgewandelt werden, so dass beide in Boolean-Ausdrücken sicher verwendet werden können.

var bFound = true;
var bLost = false;

Number-Typ

Der spezialisierste Typ, der in ECMA-262 definiert ist, ist der Number-Typ. Dieser Typ kann sowohl 32-bit Ganzzahlen als auch 64-bit Fließkommazahlen darstellen.

Jegliche direkte Eingabe (statt von einer anderen Variable abgerufen) wird als Literal des Number-Typs betrachtet. Zum Beispiel, die folgende Codezeile deklariert eine Variable, deren Wert durch das Literal 86 definiert wird:

var iNum = 86;

Oktalzahlen und Hexadezimalzahlen

Ganze Zahlen können auch als Oktal (Basis 8) oder Hexadezimal (Basis 16) dargestellt werden. Die führende Ziffer der Oktalzahl muss 0 sein, die folgenden Ziffern können jede Oktalziffer (0 bis 7) sein, wie im folgenden Code gezeigt:

var iNum = 070;  //070 ist gleich 56 im Dezimalwert

Um eine Hexadezimalzahl zu erstellen, muss die führende Ziffer 0 sein, gefolgt von dem Buchstaben x, dann sind beliebige Hexadezimalzahlen (0 bis 9 und A bis F) erlaubt. Diese Buchstaben können groß oder klein sein. Zum Beispiel:

var iNum = 0x1f;  //0x1f ist gleich 31 im Dezimalwert
var iNum = 0xAB;  //0xAB ist gleich 171 im Dezimalwert

Hinweis:Obwohl alle Integer als Oktal- oder Hexadezimalzahlen dargestellt werden können, sind alle mathematischen Operationen dezimale Ergebnisse.

Fließkommazahlen

Um einen Fließkommawert zu definieren, muss ein Dezimalpunkt und eine Ziffer nach dem Dezimalpunkt enthalten (z.B. 1.0 anstatt 1). Dies wird als Fließkomma-Zahlennotation betrachtet. Zum Beispiel:

var fNum = 5.0;

Ein interessantes Merkmal der Fließkomma-Zahlen ist, dass vor der Berechnung tatsächlich ein String gespeichert wird.

Wissenschaftliche Notation

Für sehr große oder sehr kleine Zahlen kann die wissenschaftliche Notation verwendet werden, um Fließkommazahlen darzustellen, eine Zahl kann als Zahl (einschließlich Dezimalzahlen) mit e (oder E) dargestellt werden, gefolgt von einer Multiplikation mit einem Vielfachen von 10. Zum Beispiel:

var fNum = 5.618e7

Dieser Symbol bedeutet die Zahl 56180000. Durch die Umwandlung der wissenschaftlichen Notation in einen Ausdruck kann dieser Wert erhalten werden: 5.618 x 107

Sehr kleine Zahlen können auch in wissenschaftlicher Notation dargestellt werden, zum Beispiel kann 0.00000000000000008 als 8-e dargestellt werden.17(Hier wird 10 auf die -17te Potenz erhöht, was bedeutet, dass es 10 17 Mal geteilt werden muss). ECMAScript konvertiert standardmäßig Fließkommazahlen mit 6 oder mehr führenden Nullen in wissenschaftliche Notation.

Hinweis:Fließkommazahlen können auch im 64-Bit-IEEE-754-Format gespeichert werden, was bedeutet, dass Dezimalwerte maximal 17 Dezimalstellen haben können. Werte nach den 17 Stellen werden abgeschnitten, was zu kleinen mathematischen Fehlern führen kann.

Spezielle Number-Werte

Einige spezielle Werte sind auch als Number-Typ definiert. Die ersten beiden sind Number.MAX_VALUE und Number.MIN_VALUE, die die äußeren Grenzen des Number-Wertebereichs definieren. Alle ECMAScript-Zahlen müssen zwischen diesen beiden Werten liegen. Der berechnete numerische Wert muss jedoch nicht zwischen diesen beiden Werten liegen.

Wenn der berechnete Wert größer als Number.MAX_VALUE ist, wird er mit dem Wert Number.POSITIVE_INFINITY belegt, was bedeutet, dass es keine numerischen Werte mehr gibt. Ebenso wird eine Berechnung, deren Ergebnis kleiner als Number.MIN_VALUE ist, mit dem Wert Number.NEGATIVE_INFINITY belegt, was ebenfalls bedeutet, dass es keine numerischen Werte mehr gibt. Wenn die Berechnung einen unendlichen Wert zurückgibt, kann das erzeugte Ergebnis nicht mehr für andere Berechnungen verwendet werden.

Tatsächlich gibt es spezielle Werte, die Unendlich darstellen, wie Sie vermutet haben, nämlich Infinity. Der Wert von Number.POSITIVE_INFINITY ist Infinity. Der Wert von Number.NEGATIVE_INFINITY ist -Infinity.

Da unendliche Zahlen sowohl positiv als auch negativ sein können, kann eine Methode verwendet werden, um zu bestimmen, ob eine Zahl endlich ist (statt jede unendliche Zahl einzeln zu testen). Die isFinite()-Methode kann auf jede Zahl angewendet werden, um sicherzustellen, dass sie nicht unendlich ist. Zum Beispiel:

var iResult = iNum * some_really_large_number;
if (isFinite(iResult)) {
    alert("finite");
{}
else {
    alert("infinite");
{}

Der letzte spezielle Wert ist NaN, was "Not a Number" bedeutet. NaN ist ein merkwürdiger spezieller Wert. Im Allgemeinen tritt dieses Szenario auf, wenn eine Typkonvertierung (String, Boolean usw.) fehlschlägt. Zum Beispiel wird der Versuch, das Wort "blue" in einen numerischen Wert zu konvertieren, fehlschlagen, da es keinen与之等价的数值 gibt. Wie Unendlich kann NaN auch nicht in arithmetischen Berechnungen verwendet werden. Eine weitere merkwürdige Eigenschaft von NaN ist, dass es sich selbst nicht gleich ist, was bedeutet, dass der folgende Code false zurückgibt:

alert(NaN == NaN);  //Ausgabe "false"

Aus diesem Grund wird die Verwendung des NaN-Werts selbst nicht empfohlen. Die Funktion isNaN() macht einen ziemlich guten Job:

alert(isNaN("blue"));  //Ausgabe "true"
alert(isNaN("666"));  //Ausgabe "false"

String-Typ

Der String-Typ ist besonders, da er der einzigePrimitive-Typ ist, der keine festgelegte Größe hat. Man kann damit 0 oder mehr Unicode-Zeichen speichern, die durch 16-Bit-Integern dargestellt werden (Unicode ist eine internationale Zeichensatz, die im folgenden Tutorial diskutiert wird).

Die Länge der Zeichenkette und der Positionsindex der Zeichen

Stringliterale werden durch doppelte Anführungszeichen ("

var sColor1 = "red";
var sColor2 = 'red';

Der String-Typ umfasst auch mehrere Zeichensäätze, die Java-, C- und Perl-Entwickler sehr gut kennen sollten.

Nachstehend sind die Zeichensäätze von ECMAScript aufgeführt:

Literale Bedeutung
\n Zeilenumbruch
\t Tabulator
\b Leerzeichen
\r Return
\f Seitenwechsler
\\ Backslash
\' Einzelne Anführungszeichen
\" Doppelte Anführungszeichen
\0nnn Achtadezimalcode nnn darstellenden Zeichens (n ist eine der achtsamen Zahlen von 0 bis 7
\xnn Hexadezimalcode nn darstellenden Zeichens (n Ist eine der 16-Bit-Zahlen von 0 bis F (hexadezimal)
\unnnn Hexadezimalcode nnnn darstellenden Unicode-Zeichen (n Ist eine der 16-Bit-Zahlen von 0 bis F (hexadezimal)