Perché le implementazioni javascript analizzano i numeri in questo modo?

2

Secondo la specifica ECMAScript la parte intera di un decimale il numero dovrebbe essere zero o iniziare con una cifra diversa da zero. Un valore esadecimale dovrebbe iniziare con 0x.

Javascript, nei principali browser, estende EMCAScript per includere numeri ottali. Questi sono determinati dal fatto che una sequenza di cifre (da 0 a 7 inclusi) inizia con uno zero.

Dati questi fatti, la mia ingenua implementazione di un interprete javascript probabilmente analizzerebbe gli interi un po 'come questo:

if first_char in [1-9] then
    parse_input_as_decimal()
else if first_char is 0 then
    if second_char is 'x' then
        parse_input_as_hexadecimal()
    else if second_char in [1-7] then
        parse_input_as_octal()
    else
        parse_input_as_zero()

Tuttavia i browser Web sembrano agire in modo un po 'strano in quanto se un numero che inizia con zero contiene le cifre 8 o 9, allora lo legge come decimale valido. Questo può portare a stranezze, specialmente quando si utilizza un punto decimale o esponente. Alcuni esempi:

011 // is octal
0011 // is octal
019 // is decimal
0091 // is decimal
011.0 // throws an error
019.0 // is decimal
011e5 // throws an error
019e5 // is decimal

La mia domanda è perché si comportano così? È solo qualche stranezza della storia? O c'è una buona ragione? È stato scritto in alcune specifiche da qualche parte? Questo cambierà mai?

So che questo è un po 'arcano e in questi giorni poche persone usano gli ottali in javascript, ma sono curioso.

    
posta ChrisD 08.06.2013 - 03:02
fonte

1 risposta

2

Quirk: 'strict mode' elimina questo comportamento, penso che sia stato un comportamento non standard implementato da un paio di browser ma non sono al 100% (non essendo standard, sono sicuro che verrà rimosso da JavaScript rigoroso)

    
risposta data 08.06.2013 - 03:21
fonte

Leggi altre domande sui tag