Supponiamo che io scriva 0.5come 0.-5in un modo inaspettato, ma può ancora funzionare. Cosa fa 0.in 0.-5modo che possa ancora funzionare e restituisca -5?
Ho anche provato alert(0.-5+1)quali stampe -4, JavaScript ignora 0.in 0.-5?
Supponiamo che io scriva 0.5come 0.-5in un modo inaspettato, ma può ancora funzionare. Cosa fa 0.in 0.-5modo che possa ancora funzionare e restituisca -5?
Ho anche provato alert(0.-5+1)quali stampe -4, JavaScript ignora 0.in 0.-5?
0.-5sia un "modo inaspettato"?
0.-5essere un errore di sintassi e non consentire i valori letterali float con un punto finale, ma costringere le persone a scrivere .0alla fine.
.ti impedisce di scrivere qualcosa del tipo 123.toString(16)(Un trucco comune è usare 123..toString(16), che è davvero (123.).toString(16))
Risposte:
Le cifre finali dopo la a .sono facoltative:
console.log(0. === 0); // true
Così
0.-5
valuta a
0 - 5
che è giusto -5. Allo stesso modo,
0.-5+1
è
0 - 5 + 1
che è
-5 + 1
o -4.
0.-5potrebbe essere analizzato con successo come 0.[1] , -e 5. Di seguito è riportato l'albero della sintassi astratta per l'espressione generata da AST explorer:

Questo (in modo inaspettato) è JavaScript valido e restituisce -5.
[1] Secondo la grammatica per i letterali numerici, le cifre decimali e le parti esponenti sono opzionali:
NumericLiteral ::
DecimalLiteral
[...]DecimalLiteral ::
DecimalIntegerLiteral. DecimalDigits opt ExponentPart opt
In JS puoi esprimere un numero con il punto decimale opzionale.
x = 5.; //5
x = 5. + 6. //11
E a partire dal commento di Tvde1, è possibile applicare anche qualsiasi metodo Number.
5..toString()
Questa sintassi ci consente di eseguire le funzioni numeriche senza parentesi.
5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome
Vedi questa domanda per scoprire perché.
5..toString().
1.0è in virgola mobile ma 1.è un numero intero.
floatha metodi ed 5.è un file float.
(1).toMethod()è legale vieta (1.)dal parsing correttamente. L'approccio più tradizionale all'analisi (lexing avido dei token, inclusi i letterali, quindi l'analisi) produce il comportamento Javascript.
Penso che la vera risposta non sia sul punto decimale, ma sul segno meno: non sarà interpretato come un operatore se è preceduto da qualcosa che assomiglia a un numero?
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." o "0" è lo stesso in JavaScript perché il tipo è univoco per i numeri, chiamato Numero. L'operatore meno è tra i numeri, cerca sempre di convertire ciò che passi in un numero. In Python è diverso il primo è un Float e il secondo un Integer perché ha diversi tipi.
0.è come0.0. O semplicemente0.