Was ist der Unterschied zwischen 987 und (987) in JavaScript?

8

Ich habe eine einfache Erweiterungsmethode geschrieben.

%Vor%

987654321.toMillion() löst aus:

  

SyntaxError: Unerwartetes Token ILLEGAL

Aber (987654321).toMillion() funktioniert.

Meine Frage ist also: Was ist der Unterschied zwischen 987 und (987) ?

Nur zur Info:

%Vor%

Und

%Vor%     
dfang 11.10.2012, 08:58
quelle

3 Antworten

11

Wie würde der Parser wissen, dass der Teil, der dem Zeichen . folgt, einen Methodenaufruf anstelle eines anderen Teils der Zahl bedeuten soll? Zum Beispiel:

%Vor%

Aus diesem Grund können Sie keine Methoden für numerische Literale aufrufen. Wenn Sie das Literal in Klammern setzen (den Gruppierungsoperator ), evaluiert die Laufzeitumgebung den enthaltenen Ausdruck und wendet die Methode auf Ergebnis dieser Bewertung.

Der Gruppierungsoperator entfernt die Mehrdeutigkeit des . -Zeichens.

Aktualisieren

Nach einigen Gedanken und Untersuchungen durch die Spezifikation gibt es einen guten Grund, die Verwendung eines Lookaheads nicht zuzulassen, um zu bestimmen, ob das, was dem . -Zeichen folgt, Teil der Zahl oder einer Eigenschaftskennung ist.

Wie @ CygnusX1 in den Kommentaren erwähnt, hätten Sie jedoch die beiden Situationen ( . gefolgt von einer Ziffer und . gefolgt von einem nicht-numerischen Zeichen) durch die Verwendung eines Lookaheads unterscheiden können. Da Bezeichner nicht mit einer Zahl beginnen können, muss ein numerisches Zeichen nach dem . eine Zahl sein. Wenn dem . ein nicht numerisches Zeichen folgt, kann es nicht Teil der Nummer sein. Aber das ist nicht ganz richtig.

Es gibt eine Situation, in der ein nicht numerisches Zeichen dem . -Zeichen folgen kann, aber immer noch Teil der Zahl sein muss:

%Vor%

Das e gibt an, dass der Exponent folgt und in Klein- oder Großbuchstaben geschrieben werden kann. Aus diesem Grund muss bei der Verwendung eines Lookahead berücksichtigt werden, dass, wenn das Zeichen nach . e oder E ist, es immer noch eine Methode oder einen Teil der Zahl darstellen kann. Es ist einfacher, die Verwendung von Eigenschaften für numerische Literale einfach zu verbieten.

    
James Allardice 11.10.2012, 09:02
quelle
5

Das . ist in JavaScript überladen.

%Vor%     
Torsten Walter 11.10.2012 09:02
quelle
1

Wenn 987654321.toMillion() analysiert wird, wird "period" als Trennzeichen des Bruches interpretiert. Wenn Sie die Zahl als Objekt verwenden möchten, müssen Sie sie mit geschweiften Klammern umbrechen.

    
bjornd 11.10.2012 09:03
quelle

Tags und Links