2016-01-27 22 views
7

Voglio solo capire js logic con 0-s all'inizio del numero. Per esempioJavascript 0 all'inizio del numero

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à uno SyntaxError

Grazie

+6

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Integers – hindmost

+2

Nel mio browser, '09.3' non è sicuramente uguale a' 0.3'. Quale browser (o ambiente) stai usando? – Pointy

+0

Punta, mi dispiace per errore, intendo 9,3 – Gor

risposta

15

leader 0 su un letterale numerico indica che un intero ottale è l'intenzione, meno cifra seconda è 8 o 9. In tal caso, lo 0 iniziale viene ignorato.

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

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

Come indicato in un commento qui sotto, in modalità "rigorosa" le costanti ottali sono completamente non ammesse.

+2

Non solo la seconda cifra: se una cifra è 8 o 9, lo 0 iniziale viene ignorato. – Barmar

+0

Potrebbe anche essere utile menzionare che la sintassi è stata deprecata in ES5, quindi non è valida per anni al momento. – zerkms

+0

@Barmar hmm MDN implica che la seconda cifra è importante; Controllerò di nuovo le specifiche. * edit * sembra che MDN sia sbagliato (o mal scritto). – Pointy

5

A lo zero iniziale indica un numero ottale (base 8) (in contrapposizione a un decimale - base 10 - numero).

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

Pertanto, 09,3 il valore predefinito è 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.

+1

Questo non spiega ancora perché genera un'eccezione, perché i valori letterali ottali devono essere numeri interi. –

+0

'09.3' è impostato su' 9.3', non '0.3'. Quello era un errore nella domanda, che è stato modificato. – Barmar