Supongamos que yo escribo 0.5
como 0.-5
en forma inesperada, pero todavía puede funcionar. ¿Qué hace 0.
in 0.-5
para que aún pueda ejecutarse y se evalúe como -5?
También probé alert(0.-5+1)
que imprime -4, hace caso omiso de JavaScript 0.
en 0.-5
?
javascript
numbers
ocomfd
fuente
fuente
0.
es como0.0
. O simplemente0
.0.-5
es una "forma inesperada"?0.-5
sido un error de sintaxis y no permitir literales flotantes con un período final, pero obligar a las personas a escribir.0
al final..
impide escribir algo como123.toString(16)
(un truco común es usar123..toString(16)
, que es realmente(123.).toString(16)
)Respuestas:
Los dígitos finales después de a
.
son opcionales:console.log(0. === 0); // true
Entonces
0.-5
evalúa a
0 - 5
que es justo
-5
. Similar,0.-5+1
es
0 - 5 + 1
cual es
-5 + 1
o
-4
.fuente
0.-5
pudo analizar con éxito como0.
[1] ,-
y5
. A continuación se muestra el árbol de sintaxis abstracto para la expresión generada por AST Explorer:Esto (de forma inesperada) es JavaScript válido y se evalúa como
-5
.[1] De acuerdo con la gramática para literales numéricos, los dígitos decimales y las partes de exponentes son opcionales:
fuente
En JS puede expresar un número con punto decimal opcional.
x = 5.; //5 x = 5. + 6. //11
Y a partir del comentario de Tvde1, también se puede aplicar cualquier método numérico.
5..toString()
Esta sintaxis nos permite ejecutar las funciones numéricas sin paréntesis.
5.toString() //error (5).toString() //good 5..toString() //good 5 .toString() // awesome
Vea esta pregunta para averiguar por qué.
fuente
5..toString()
.1.0
es un punto flotante pero1.
es un número entero.float
s tienen métodos y5.
es unfloat
.(1).toMethod()
sea legal prohíba(1.)
analizar correctamente. El enfoque más tradicional de análisis (lectura codiciosa de tokens, incluidos los literales, y luego análisis) produce el comportamiento de Javascript.Creo que la respuesta real no se trata del punto decimal, sino del signo menos: ¿no se interpretará como un operador si está precedido por algo que parezca un número?
fuente
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' es el mismo en JavaScript porque el tipo es único para los números, llamado Número. El operador menos está entre números, intente siempre convertir lo que pasa en un número. En Python es diferente primero es un Float y el segundo un Integer porque tiene varios tipos.
fuente