2013-03-17 8 views
7

Warum gibt 2..toString() zurück 2 aber 2.toString() wirft diesen Fehler?Warum funktioniert 2..toString()?

Beispiel:

console.log(2..toString()); // prints 2 

// Firefox throws the error 
// `SyntaxError: identifier starts immediately after numeric literal` 
console.log(2.toString()); 

var x = 2; 
console.log(x.toString()); // prints 2 

// Firefox throws the error 
//`TypeError: XML descendants internal method called on incompatible Number` 
console.log(x..toString()); 
+0

(2) .toString() liefert das erwartete Ergebnis. (keine Antwort aber ein Test ...) –

+0

Gibt IE auch Fehler? – DevelopmentIsMyPassion

+0

Ich weiß, aber warum funktioniert '2..toString()' auch? –

Antwort

4

2 ist nur eine Nummer, es hat keine Methoden zu nennen.

2. kann in eine Zeichenfolge umgewandelt werden, die ein Objekt ist (d. H. '2.0'), daher kann die Methode haben.

Nur 2.toString() wird als 2.0tostring() geparsed, was natürlich keinen Sinn ergibt.

Betrachtet man, wie die beiden analysiert werden:

enter image description here

vs

enter image description here

Das Tool erzeugt diese hier übrigens ist: http://jsparse.meteor.com/

+3

Welches Werkzeug ist das? –

+0

** Es gefunden. Das Tool ist hier (http://jsparse.meteor.com/)** –

+2

können Sie bitte erklären, wie die Diagramme zeigt, dass die erste falsch ist? beide scheinen in einer Zahlenbox zu sein. Ich kann nicht sehen, wie die Diagramme helfen .... können Sie bitte antworten? –

8

Das ist, weil 2. als 2.0 analysiert wird, so 2..toString() entspricht 2.0.toString(), die ein gültiger Ausdruck ist.

Auf der anderen Seite wird 2.toString() als 2.0toString() geparst, was ein Syntaxfehler ist.

+0

'2.' ergibt' 2' in Chromiums Konsole. –

+0

@ G.Kayaalp, yup, beide '2 === 2.0' und' 2. === 2.0' sind 'wahr'. –

+0

hasse es, der Advokat des Teufels hier zu sein, aber '2. === 2 'ist auch' wahr ' –

1

2..toString() wird interpretiert als 2.0.toString().

Eigentlich 2. eine Zahl: console.log(typeof 2.); geben werden: Anzahl

4
2.toString() 

Der Dolmetscher sieht 2 und denkt: "Oh, eine Zahl!" Dann sieht es den Punkt und denkt "Oh, eine Dezimalzahl!" Und dann geht es zum nächsten Zeichen und sieht ein t, und es wird verwirrt. "2.t ist keine gültige Dezimalzahl", heißt es, da es einen Syntaxfehler auslöst.


2..toString() 

Der Dolmetscher sieht 2 und denkt: "Oh, eine Zahl!" Dann sieht es den Punkt und denkt "Oh, eine Dezimalzahl!" Dann sieht es einen anderen Punkt und denkt: "Oh, ich denke, das war das Ende unserer Zahl. Jetzt betrachten wir die Eigenschaften dieses Objekts (die Zahl 2.0)." Dann ruft es die toString Methode des 2.0 Objekts auf.

Verwandte Themen