javascript numbers leading-zero

Javascript 0 al comienzo del número



numbers leading-zero (3)

Solo quiero entender la lógica js con 0-s al comienzo del número. Por ejemplo

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

¿Alguien puede explicar cómo funciona, por qué en el primer ejemplo funciona e ignora los ceros a la izquierda, pero en el segundo ejemplo me da un SyntaxError

Gracias


El 0 inicial en un literal numérico indica que la intención es un entero octal, a menos que el segundo dígito sea 8 o 9 . En ese caso, se ignora el 0 inicial.

Como los literales numéricos octales deben ser enteros, 02.5 es erróneo.

Este comportamiento se registró como un error en Firefox en 2014, pero debido a que hay mucho código JavaScript en el mundo y gran parte de él (probablemente sin darse cuenta) se basa en que 09.3 no es un error de sintaxis, el error se marcó "WONTFIX".

Como se señala en un comentario a continuación, en modo "estricto", las constantes octales no se permiten por completo.


Es tarde para esta respuesta pero sigue siendo una actualización de mi parte. Como dijo Pointy en modo estricto, las constantes octales no están permitidas.

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

lanza una excepción

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

Incluso si agregamos el segundo dígito como 8 o 9 los 0 iniciales no están permitidos en strict mode

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

También arroja una excepción

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

Además, no tenía ningún sentido porque los ceros iniciales son los mismos valores sin ceros iniciales. Pero debe tenerse cuidado al recibir los valores del otro lado.


Un cero inicial indica un número octal (base 8) (en oposición a un número decimal - base 10).

Un 0x inicial indica un número hexadecimal y un 0b inicial un número binario.

Por lo tanto, el valor predeterminado de 09.3 es decimal porque el dígito ''9'' no existe en notación octal.

Editar (crédito Evan Trimboli, abajo): 02.5 produce una excepción porque los literales octales deben ser enteros.