¿Por qué 10..toString () funciona, pero 10.toString () no lo hace? [duplicar]


Posible Duplicado:
Uso de toString en JavaScript

152..toString(2)

Crea correctamente la cadena binaria" 10011000", pero

152.toString(2)

Lanza una excepción

"SyntaxError: el identificador comienza inmediatamente después del literal numérico"

¿Por qué? ¡La última sintaxis en realidad suena más correcta mientras que la primera parece muy extraña!

Author: Community, 2012-10-31

3 answers

A . después de un número puede parecer ambiguo. ¿Es un decimal o un operador miembro de objeto?

Sin embargo, el intérprete decide que es un decimal, por lo que le falta el operador miembro.

Lo ve así:

(10.)toString();  // invalid syntax

Cuando incluyes el segundo ., tienes un decimal seguido por el operador miembro.

(10.).toString();

@pedantes y downvoters

El . el carácter presenta una ambigüedad. Puede ser entendido como el operador miembro, o un decimal, dependiendo de su ubicación. Si no hubiera ambigüedad, no habría pregunta que hacer.

La interpretación de la especificación del carácter . en esa posición particular es que será un decimal. Esto se define por la sintaxis literal numérica de ECMAScript.

Solo porque la especificación resuelve la ambigüedad para el intérprete JS, no significa que la ambigüedad del carácter . no exista en todo.

 98
Author: I Hate Lazy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-02 15:19:53

El lexer (también conocido como "tokenizer") al leer un nuevo token, y al encontrar por primera vez un dígito, seguirá consumiendo caracteres (es decir, dígitos o un punto) hasta que vea un carácter que es no parte de un número legal.

<152.> es un token legal (no se requiere el 0 final) pero <152..> no lo es, por lo que su primer ejemplo se reduce a esta serie de tokens:

<152.> <.> <toString> <(> <2> <)>

Que es la secuencia legal (y esperada), mientras que la segunda parece

<152.> <toString> <(> <2> <)>

Que es ilegal: no hay un token de período que separe el Número de la llamada toString.

 101
Author: Alnitak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-22 15:28:59

10. es un float number y puede usar toString en float

Eg.

parseFloat("10").toString() // "10"
 0
Author: Anoop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-30 23:55:17