Załóżmy, że piszę 0.5
jak 0.-5
w nieoczekiwany sposób, ale może nadal działać. Czego 0.
się 0.-5
zrobić tak, że można go uruchomić i nadal ma wartość -5?
Próbowałem też, alert(0.-5+1)
który drukuje -4, czy JavaScript ignoruje 0.
w 0.-5
?
javascript
numbers
ocomfd
źródło
źródło
0.
jest jak0.0
. Albo po prostu0
.0.-5
to „nieoczekiwany sposób”?0.-5
być błędem składni i nie zezwalać na literały zmiennoprzecinkowe z końcową kropką, ale zmuszać ludzi do pisania.0
na końcu..
uniemożliwia napisanie czegoś w stylu123.toString(16)
(123..toString(16)
(123.).toString(16)
Odpowiedzi:
Cyfry końcowe po a
.
są opcjonalne:console.log(0. === 0); // true
Więc
0.-5
ewaluuje do
0 - 5
co jest sprawiedliwe
-5
. Podobnie,0.-5+1
jest
0 - 5 + 1
który jest
-5 + 1
lub
-4
.źródło
0.-5
może zostać pomyślnie przeanalizowany jako0.
[1] ,-
a5
. Poniżej znajduje się abstrakcyjne drzewo składni dla wyrażenia wygenerowanego przez eksploratora AST:To (w nieoczekiwany sposób) jest poprawnym JavaScriptem i ma wartość
-5
.[1] Zgodnie z gramatyką literałów numerycznych cyfry dziesiętne i części wykładników są opcjonalne:
źródło
W JS możesz wyrazić liczbę z opcjonalną kropką dziesiętną.
x = 5.; //5 x = 5. + 6. //11
Od komentarza Tvde1 można również zastosować dowolną metodę numeryczną.
5..toString()
Ta składnia pozwala nam uruchamiać funkcje Number bez nawiasów.
5.toString() //error (5).toString() //good 5..toString() //good 5 .toString() // awesome
Zobacz to pytanie, aby dowiedzieć się, dlaczego.
źródło
5..toString()
.1.0
jest zmiennoprzecinkowe, ale1.
jest liczbą całkowitą.float
s mają metody i5.
jestfloat
.(1).toMethod()
jest to legalne, zabrania(1.)
prawidłowego analizowania. Najbardziej tradycyjne podejście do analizowania (zachłanne leksowanie tokenów, w tym literałów, a następnie analizowanie) powoduje zachowanie JavaScript.Myślę, że prawdziwa odpowiedź nie dotyczy przecinka, ale znaku minus: czy nie będzie to interpretowane jako operator, jeśli jest poprzedzone czymś, co wygląda jak liczba?
źródło
console.log(0. - 5) // -5 console.log(0 - 5) // -5 console.log('0.' - 5) // -5 console.log('0' - 5) // -5 console.log(0.-5 === -5) // true
„0” lub „0” oznacza to samo w JavaScript, ponieważ typ jest unikalny dla liczb, nazywany liczbą. Operator minus znajduje się między liczbami, staraj się zawsze konwertować to, co przekazujesz, na liczbę. W Pythonie jest inaczej, po pierwsze to Float, a po drugie Integer, ponieważ ma kilka typów.
źródło