Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

244
Visualizações
Javascript: ¿por qué `const number = 0; number.foo` devuelve `undefined`, pero `0.foo` lanza `Token no válido o inesperado`

Durante una sesión de depuración, después de cambiar el retorno de un método de 0 a null , comencé a ver una excepción que no ocurría antes.

Profundizando más, me di cuenta de que si una variable contiene un Número, puede llamar a una propiedad como si fuera cualquier otro objeto; Sin embargo, no sucede lo mismo si intenta llamar directamente a una propiedad al número.

Por ejemplo:

 const number = 0; console.log(number.foo) // undefined 0.foo // throws SyntaxError: Invalid or unexpected token

¿Qué causa esta distinción y dónde puedo leer más al respecto?

ACTUALIZAR

Me acabo de dar cuenta de que (0).foo devuelve undefined, por lo que hay al menos algo de coherencia allí, pero no sabía que Numbers podría tener propiedades en javascript.

En realidad, solo puede intentar leer, pero nunca asignar a estas propiedades:

 const number = 3; number.someProperty = true; number.someProperty // returns `undefined`
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

. se toma como el punto decimal opcional directamente después de un número. Agregar un espacio, usar corchetes o agregar otro . ser el punto decimal (para que el segundo . se interprete como un descriptor de acceso a la propiedad) resolverá el error.

Puede acceder a las propiedades de los números primitivos porque intentar invocar métodos o buscar propiedades en los primitivos hará que se envuelvan en el objeto correspondiente para realizar la operación.

 console.log(0 .foo); console.log(0..foo); console.log((0).foo);

about 4 years ago · Juan Pablo Isaza Relatório

0

0.foo lanza SyntaxError: Invalid or unexpected token y el código no se ejecuta porque no es un programa válido.

El analizador léxico encuentra 0 y sabe que un número comienza allí. Después de 0 hay un . eso le dice que el número es un número real, no un número entero. Si después . hay más dígitos que son la parte decimal del número.

En este caso no hay más dígitos después de . y el número es 2. . Los siguientes caracteres después de . ( foo ) no son parte del número pero son un identificador.

En total, el "programa" de entrada 0.foo se analiza en dos tokens: 2. , que es un número seguido de foo , que es un identificador.

Esta combinación (número seguido inmediatamente por el identificador) no es un fragmento de programa válido. En un programa correcto, un número puede ir seguido de un espacio, un operador, un punto y coma, un paréntesis cerrado y probablemente varios otros tokens léxicos, pero no un identificador.

El fragmento de código no es un programa JavaScript válido; no se puede compilar y por lo tanto no se ejecuta.

Hay varias maneras de hacer que funcione. Por ejemplo (0).foo .

Si intenta ejecutar 0.foo en la consola de desarrolladores en Firefox, arroja un error que resume lo que expliqué anteriormente: Uncaught SyntaxError: identifier starts immediately after numeric literal

about 4 years ago · Juan Pablo Isaza Relatório

0

Esto se debe a la naturaleza de JS OOP y su modelo de creación de prototipos. Todo, incluso los valores primitivos, tiene un prototipo, que suele ser un Objeto. Entonces, cualquier primitivo, String, Boolean, BigInt, etc. tiene propiedades, con la excepción de null e undefined .

 (1).toString() (1n).toString() (true).toString()

Puede acceder a prototipos de valores como este:

 Number.prototype Boolean.prototype String.prototype

Por lo tanto, puede agregar propiedades a las primitivas (pero no debe hacerlo debido a problemas de compatibilidad y la naturaleza propensa a errores de tales modificaciones). Pero aquí hay un ejemplo de esto:

 Number.prototype.negative = function () { return Number(this * -1) }; (1).negative(); // -1

En el caso de los números, obtuvo un error de sintaxis debido a las reglas de análisis de JS, no debido a su modelo OOP. JS interpreta 0. como un número con mantisa, por lo que espera un número después del punto.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda