2016-08-16 12 views
9

W konsoli JavaScript, jeśli wpisując poniżej:Co się stało w środku (1) .ToString() i 1.toString() w JavaScript

1.toString(); // Uncaught SyntaxError: Invalid or unexpected token 
(1).toString(); // "1" 

Co się dzieje wewnątrz JS kompilatora z dwoma stwierdzeniami?

+8

Musimy powiedzieć, czy kropka oddziela część dziesiętną lub właściwości obiektu. –

+1

1.toString() // to da błąd, ponieważ nie ma metody ściągania na pierwotnym typie danych Number/interger , ale gdy robisz (1) .toString(), to javascript wewnętrznie wpisuje corresion i konwertuje liczbę 1 na ciąg znaków "1", a następnie zastosuj na nim metodę toString. – atul

+0

"1" .toString(); // "1". Twoje zrozumienie ma sens. Ale co jeśli function(){}() // Unexpected token. and (function(){}()) // It's OK. Dlaczego nie można bezpośrednio wywołać anonimowej funkcji? @ ÁlvaroGonzález – soarinblue

Odpowiedz

13

() to operator grupujący, który zwraca wartość wyrażenia w środku. Tutaj w twoim przypadku jest to 1, liczba pierwotna. Więc może być zapakowany do obiektu Number i wywołać jego metodę toString.

Jednak dla 1.toString(), silnik JS nie może określić, co znaczy . - operator kropki (w przypadku metod obiektowych) lub punkt liczby zmiennoprzecinkowej?

Aby rozwiązać ten błąd, bez operatora grupowania, masz dwa podejścia:

  • 1 .toString() // spacja, działa podobnie jak operator grupowania
  • 1..toString() // dwa punkty, w których drugi jest traktowano jako operator dot
+1

'1.0.toString() 'działa również. –

13

1.toString() jest traktowanie 1 jak i całkowitą ilość oczekiwano po .

W (1).toString(), (1) jest ekspresja w którym . jest stosowany do wywołania metody.

2

uzgodnionych z @Prajeet i @Leo

Jak wyjaśniono w property accessor - Dot notacji

1 //Next Line 
.toString() //Prints "1" 

Od Mozilla.org: enter image description here