Javascript 0 all’inizio del numero

Voglio solo capire js logic con 0-s all’inizio del numero. Per esempio

var x = 09.3 // here x == 9.3 // other example 09.3 == 9.3 // returns true // but check this one var x = 02.5 // Uncaught SyntaxError: Unexpected number // or this one 02.5 == 2.5 // same error here 

Qualcuno può spiegare, come funziona, perché nel primo esempio funziona e ignora gli zeri iniziali, ma nel secondo esempio mi dà un errore Syntax

Grazie

L’iniziale 0 su un valore letterale numerico indica che un numero intero ottale è l’intenzione, a meno che la seconda cifra non sia 8 o 9 . In tal caso, lo 0 viene ignorato.

Poiché i valori letterali numerici ottali devono essere numeri interi, 02.5 è errato.

Questo comportamento è stato registrato come un bug in Firefox nel 2014, ma poiché c’è così tanto codice JavaScript nel mondo e così tanto (probabilmente inavvertitamente) si basa su 09.3 non essendo un errore di syntax, il bug è stato contrassegnato come “WONTFIX”.

Come sottolineato in un commento qui sotto, in “strict” le costanti ottali sono completamente respinte.

Uno zero iniziale indica un numero ottale (base 8) (in contrapposizione a un numero decimale – base 10 – numero).

Un 0x iniziale indica un numero esadecimale e uno 0b iniziale un numero binario.

Quindi il valore predefinito di 09.3 è decimale perché la cifra “9” non esiste nella notazione ottale.

Modifica (credito Evan Trimboli, di seguito): 02.5 genera un’eccezione perché i valori letterali ottali devono essere numeri interi.

È tardi per questa risposta, ma è ancora un aggiornamento dalla mia parte. Come detto da Pointy in modalità stretta, la costante ottale non è consentita.

 'use strict' if(022 == 22){ console.log("True"); } console.log("Failed") 

lancia un’eccezione

 { "message": "Uncaught SyntaxError: Octal literals are not allowed in strict mode.", "filename": "https://stacksnippets.net/js", "lineno": 14, "colno": 4 } 

Anche se aggiungiamo la seconda cifra come 8 o 9 lo 0 non è consentito in strict mode

 'use strict' if(029 == 29){ console.log("True"); } console.log("Failed") 

Inoltre lancia un’eccezione

 { "message": "Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.", "filename": "https://stacksnippets.net/js", "lineno": 14, "colno": 4 } 

Inoltre non aveva alcun senso perché gli zeri iniziali sono gli stessi valori senza zeri iniziali. Ma bisogna fare attenzione quando si ricevono i valori dall’altra parte.