Heim > Artikel > Web-Frontend > JavaScript: Datentypen
Ich mag JavaScript. Es ist eine Sprache, die sowohl leistungsstark als auch flexibel ist, vorausgesetzt, man weiß, wie man sie richtig verwendet. Und es kann schnell und gut gemacht werden.
Wenn Sie denken, dass JavaScript zu einfach oder zu niedrig ist, dann sind Sie in eine Falle getappt. Und Sie werden feststellen, dass viele Leute in eine solche Falle geraten sind Sprache „X“ ist besser.
Sie könnten sogar sagen, dass es großartig wäre, wenn es ein System gäbe, das Sprache konvertieren würde. Es erfordert viel Mühe und Hingabe, um aus dieser Falle herauszukommen und JavaScript wirklich zu beherrschen. weil ich seit 1997 JavaScript lerne.
Ich habe alle fortgeschrittenen Aspekte von JavaScript durch das Studium offizieller Standarddokumente beherrscht, sodass Sie auf diese Weise auch vollständige Sprachkenntnisse erwerben können, wenn Ihre Berufsbezeichnung „JavaScript-Entwickler“ enthält Das solltest du tun
In diesem Blog werde ich Ihnen einen kurzen JavaScript-Codeausschnitt geben und Ihnen dann die korrekte Ausgabe dieses Codes geben. Wenn Sie ein JavaScript-Entwickler sind, werden Sie feststellen, dass diese Art von Frage wirklich einfach ist Sie sind noch dabei, diese Sprache zu lernen. Möglicherweise stoßen Sie auf einige Schwierigkeiten, aber Sie können den Erklärungsteil unter dem Code lesen.
Der folgende JavaScript-Code zeigt ein Popup-Fenster an ?
var five = 5;
fünf.drei = 3;
alert(fünf + fünf.drei);
Gehen Sie zum Ende dieses Artikels, um die richtige Antwort zu sehen. Die Im Folgenden wird erläutert, warum es ein solches Ergebnis gibt.
In JavaScript gibt es sechs Datentypen: Objekt, Zahl, Zeichenfolge, Boolean, Null und Undefiniert.
Der Typ „Objekte“ umfasst Arrays, Funktionen und andere Allgemeine Objekte können Ganzzahlen oder Gleitkommatypen sein. Zu den Sonderwerten „NaN“ und „Infinity Strings“ gehören nur zwei Werte: „true“ und „false“. Datentypen sind etwas speziell: Der Typ Null hat nur einen Wert: null, und der Typ Undefiniert hat nur einen Wert: undefiniert. Alle anderen Typen werden als „primitiv“ bezeichnet Es ist definiert, wird aber automatisch abgeleitet, wenn das Skript ausgeführt wird. Im obigen Code ist die Variable mit dem Namen five vom Typ Number, da ihr ein Number-Literal 5 zugewiesen ist.
Ähnlich wie bei anderen Computerprogrammiersprachen wird dies auch bei JavaScript der Fall sein Konvertieren Sie den Typ eines bestimmten Werts implizit in einen Operator, der für die Verarbeitung des Werts geeignet ist. Im Gegensatz zu anderen Sprachen führt JavaScript diese Konvertierungen beispielsweise sehr aktiv durch Zahl 2, da der Minusoperator alle Operanden auf beiden Seiten in Zahlen umwandelt. Wenn ein Operand nicht in eine Zahl umgewandelt werden kann, wird stattdessen NaN („Not a Number“) verwendet „5“ – „Fred“ wird implizit in 5 – NaN konvertiert. Dann ist das Operationsergebnis ebenfalls NaN.
Ein vollständiger Satz impliziter Konvertierungsregeln ist nicht sehr kompliziert. Sie müssen nur wissen, welche Art von Operanden jeder hat Operator erfordert.
Das Konvertieren eines beliebigen Werts in einen primitiven Wert erfolgt wie folgt: Die Konvertierung eines Objekts in einen primitiven Wert ist komplizierter: wenn der Typ des Operanden vom Typ sein muss Number bedeutet, dass die JavaScript-Engine die valueOf()-Methode des Objekts aufruft. Wenn das zurückgegebene Ergebnis immer noch kein primitiver Wert ist, wird die toString()-Methode des Objekts aufgerufen, um es in einen String-Wert umzuwandeln Der Typ des Operanden muss vom Typ String sein. Wenn das zurückgegebene Ergebnis kein primitiver Wert ist, wird in beiden Fällen die Methode valueOf() des Objekts aufgerufen immer noch kein primitiver Wert, es wird eine Ausnahme ausgelöst
Wenn der Typ des Operanden eine Zahl sein muss, aber der tatsächliche Typ des Operanden ist:
Objekt:
Der Wert steht an erster Stelle Wenn das Ergebnis der Konvertierung keine Zahl ist, wird der folgende Konvertierungszweig eingegeben.
String:
Werte vom Typ String werden entsprechend in numerische Typen konvertiert übliche JavaScript-Regeln
Boolean:
Wenn der Wert wahr ist, wird er in 1 konvertiert, andernfalls wird er in 0 konvertiert
Null:
0
Undefiniert:
NaN
Wenn der Typ des Operanden eine Zeichenfolge sein muss, der tatsächliche Typ des Operanden jedoch ist:
Objekt:
Der Wert wird zuerst in den umgewandelt Originalwert. Wenn das Konvertierungsergebnis keine Zeichenfolge ist, wird der folgende Konvertierungszweig eingegeben.
Zahl:
Die Zahl wird direkt in eine Zeichenfolge umgewandelt, z. B. „123“ oder „12,34“
Boolescher Wert:
in „wahr“ oder „falsch“ konvertieren
Null:
„null“
Undefiniert:
“undefiniert“
Wenn der Typ des Operanden ein boolescher Wert sein muss, der tatsächliche Typ des Operanden jedoch ist:
Objekt:
wahr
Zahl:
Wenn der Wert ist 0, wird zu false, andernfalls zu true (Anmerkung des Übersetzers: NaN wird auch zu false)
String:
Wenn der Wert ein leerer String „“ ist, dann ist turn false, andernfalls ist er falsch wird zu wahr
Null:
false
Undefiniert:
false
Wenn der Typ des Operanden ein Objektwert sein muss, aber der tatsächliche Typ des Operanden ist:
Number:
verwendet den Wrapping-Objekttyp Number, um den ursprünglichen Wert zu umschließen, neue Number(value)
String:
verwendet den Wrapping-Objekttyp String Um den ursprünglichen Wert zu umschließen, neuer String(Wert)
Boolean:
Verwenden Sie den Wrapping-Objekttyp Boolean, um den ursprünglichen Wert zu umschließen, neuer Boolean(Wert)
Null:
Eine Ausnahme auslösen
Undefiniert:
Wirft eine Ausnahme aus
Da nun alle Konvertierungsregeln klar sind, kehren wir zum ursprünglichen Beispiel zurück.
var five = 5;
fünf.drei = 3;
alert(fünf + fünf.drei);
Wie bereits erwähnt, erstellt die erste Codezeile eine Variable mit dem Namen fünf vom Typ Zahl.
Wenn ein Eigenschafts-Accessor für die Variable Five verwendet wird, wird sein Wert in den Typ Object konvertiert. Dieser Vorgang wird als „Wrapping“ bezeichnet und basiert auf dem Number-Konstruktor, der tatsächlich ein Objekt und keinen primitiven Wert erzeugt entspricht dem folgenden Code:
(new Number( five)). three=3;
Wie Sie sehen können, haben wir das neu generierte Number-Objekt nicht konvertiert. Die Referenz von wird in einer Variablen gespeichert. Nachdem der Ausdruck ausgeführt wurde, wird das Objekt mit dem hinzugefügten Three-Attribut nicht geändert.
Der Ausdruck five. Three in der dritten Codezeile erstellt erneut ein Number-Objekt Das Objekt hat keine drei Attribute, daher wird der Sonderwert undefiniert zurückgegeben:
alert(5+undefiniert); Beispiel: undefiniert wird in NaN umgewandelt, was zu Folgendem wird:
alert(5+NaN); Dies erklärt, warum im letzten Popup-Fenster nur ein NaN angezeigt wird (Anmerkung des Übersetzers: Es gibt noch den letzten Schritt der impliziten Konvertierung. Wenn Alert() ausgeführt wird, wird NaN automatisch in „NaN“ konvertiert.
Kommentar:
jerone:
Was Sie haben in diesem Artikel erwähnt, dass es nur einen Teil von JavaScript enthält, genauer gesagt nur ECMAScript. Darüber hinaus enthält JavaScript auch DOM, was bedeutet, dass es auch Node Element, HTMLElement und weitere Datentypen gibt.
Autor Antwort:
Node, Element und HTMLElement sind keine Datentypen, genau wie Array, Date und RegExp gehören sie alle zum Objekttyp.
Marcus Pope:
Ich denke, wir sollten darauf hinweisen Korrekte Schreibweise, damit der folgende Code normal ausgeführt werden kann
var five = new Number(5);
alert(fünf); // 5
fünf.drei = 3;
Alert(fünf + fünf.drei); //8
Ich denke auch, dass es besser ist, „Zahl“ zu verwenden, um auf den ursprünglichen Wert der Zahl zu verweisen, und „Zahl“, um auf Wrapper-Objekte numerischer Typen zu verweisen. um Verwirrung beim Leser zu vermeiden. Dies ist auch die Zeichenfolge, die angezeigt wird, wenn der Operator „typeof“ in JavaScript verwendet wird, um die inneren Klasseneigenschaften dieser Werte anzuzeigen. (Anmerkung des Übersetzers: Dies bezieht sich auf „typeof 5 === „number“)
ACRESTAN :
Ja, dieser Artikel ist sehr verwirrend, weil der Autor Typzeichenfolgen verwendet, die mit Großbuchstaben beginnen, um primitive Werte zu beschreiben...
Zum Beispiel dieser Satz „Die erste Zeile erstellt eine Variable namens fünf, deren Typ Zahl ist“ , das ist falsch!
Metadings:
Es gibt auch einen siebten Datentyp in JavaScript. Der wichtigste Typ: Funktion. In JavaScript können neue Objekte mithilfe von Funktionen erstellt werden Es gibt einen Unterschied zwischen primitiven Werttypen und Funktionstypen true
// (typeof Project === 'function') === true
var o = new Project();
// o instanceof Project === true
/ / o Instanz von Object === true
// (typeof Project === 'object') === true
Bitte lesen Sie diesen Link http://metadea.de/V/ sorgfältig durch, um zu sehen, wie ich schreibe eine echte JavaScript-Funktion. (Anmerkung des Übersetzers: Es gibt einen weiteren Satz, der nicht übersetzt wurde, daher kann ich ihn nicht verstehen. Ich habe das Gefühl, dass die Leute Unsinn reden.)
Antwort des Autors:
Offensichtlich sind Funktionen sehr Sie sind in JavaScript wichtig und verdienen einen separaten Artikel, um sie zu erklären. Funktionen sind jedoch nur eine besondere Art von Objekten, obwohl sie immer noch Objekte sind.
Objekte, die von vielen verschiedenen Konstruktoren erstellt wurden, erben alle das Gleiche Typ: Objekt. Dies ist leicht zu erkennen: Wenn Objekt(a) === a, dann a Es handelt sich um einen Objekttyp, nicht um andere primitive Werttypen.
ulu:
Dieser Artikel beweist nur weiter dass JavaScript nicht nur die mächtigste, sondern auch die verwirrendste Sprache ist. Es sollte unbedingt vermieden werden. Eines Tages wird es eine benutzerfreundlichere Sprache geben, die in alle gängigen Browser integriert ist, und ich hoffe, dass ich das nachholen kann Mein Leben lang.
Antwort des Autors:
Wenn Sie einen Hammer in der Hand halten, sieht alles aus wie ein Nagel. Wenn Sie denken, dass JavaScript verwirrend ist, wird das jede Funktion beweisen Dave Chapman:
Diese Art von Codierungsfehlern sind der Grund, warum wir eine bessere IDE benötigen, die Syntaxprüfungen durchführen kann, bevor wir den Code während des Codierens ausführen. Wenn wir beispielsweise den Code im Beispiel im Abschluss-Compiler ausführen, wird die folgende Warnung generiert Nachricht:
"JSC_INEXISTENT_PROPERTY: Eigenschaft drei wurde nie für Nummer in Zeile 4 Zeichen 13 definiert:
alert(fünf + fünf.drei);"
(Anmerkung des Übersetzers: Der Abschluss-Compiler ist der Codekompressor oder Compiler von Google. https://developers.google.com/closure/compiler/)
simonleung:
Eine Zahl kann vom Typ „Objekt“ oder „Zahl“ sein.
Bei Verwendung in Bedingung Anweisungen oder andere Stellen, die in boolesche Werte konvertiert werden müssen, führen zu unterschiedlichen Ergebnissen. Beispielsweise wird
Number(0) wahr, weil Number(0) ein Objekt ist, und 0 wird offensichtlich erhalten falsch.
(Anmerkung des Übersetzers: Er liegt hier falsch. Als Funktion ist Number nur eine Typkonvertierungsfunktion und der ursprüngliche Wert wird weiterhin zurückgegeben. Nur wenn new Number(0) verwendet wird, wird Number als Konstruktor betrachtet. was zurückgegeben wird, ist das Objekt)
Der andere führt eine Art Operation für null aus und gibt „Objekt“ zurück, aber es ist kein echtes Objekt, sondern ein falscher Wert und wird in „falsch“ konvertiert