2013-03-17 12 views
7

Dlaczego 2..toString() zwraca 2, ale 2.toString() zgłasza ten błąd?Dlaczego działa funkcja 2..toString()?

przykład:

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() daje oczekiwany wynik. (nie jest to odpowiedź, ale test ...) –

+0

Czy IE również podaje błąd? – DevelopmentIsMyPassion

+0

Wiem, ale dlaczego działa również funkcja "2..toString()"? –

Odpowiedz

4

2 to tylko liczba, nie ma żadnych metod, aby zadzwonić.

2. może być wymuszony na łańcuchu, który jest obiektem (tj. '2.0'), a zatem może mieć tę metodę.

Po prostu 2.toString() będzie przetwarzany jako 2.0tostring(), co oczywiście nie ma sensu.

Patrząc na to, jak te dwa są przetwarzane:

enter image description here

vs

enter image description here

Narzędzie do generowania nich jest tu przy okazji: http://jsparse.meteor.com/

+3

jakie to narzędzie? –

+0

** Znaleziono. Narzędzie jest tutaj (http://jsparse.meteor.com/)** –

+2

czy możesz wyjaśnić, w jaki sposób diagramy wskazują, że te pierwsze są złe? oba wydają się być w pudełku numerycznym. Nie mogę zobaczyć, jak diagramy pomagają .... czy możesz odpowiedzieć? –

8

To dlatego 2. jest analizowany jako 2.0 tak 2..toString() odpowiada 2.0.toString(), co jest ważne ekspresję.

Z drugiej strony 2.toString() jest analizowany jako 2.0toString(), co jest błędem składni.

+0

'2.' daje" 2 "w konsoli Chromium. –

+0

@ G.Kayaalp, yup, zarówno '2 === 2.0' i' 2. === 2.0' są "prawdziwe". –

+0

Nienawidzę być tutaj adwokatem diabła, ale "2. === 2' to 'true' oraz –

1

2..toString() będzie interpretowane jako 2.0.toString().

Właściwie 2. jest liczbą: console.log(typeof 2.); będzie podać: numer

4
2.toString() 

Interpreter widzi 2 i myśli: "och, numer!" Następnie widzi kropkę i myśli: "o, liczba dziesiętna!" A potem przechodzi do następnej postaci i widzi t, i robi się zdezorientowana. "2.t nie jest prawidłową liczbą dziesiętną", mówi, ponieważ generuje błąd składni.


2..toString() 

Interpreter widzi 2 i myśli: "och, numer!" Następnie widzi kropkę i myśli: "o, liczba dziesiętna!" Następnie widzi inną kropkę i myśli: "Och, myślę, że to był koniec naszej liczby, teraz przyglądamy się właściwościom tego obiektu (liczba 2.0)." Następnie wywołuje metodę toString obiektu 2.0.

Powiązane problemy