67 votes

Pourquoi 10..toString() fonctionne-t-il, mais pas 10.toString() ?

Duplicata possible :
Utilisation de toString en JavaScript

152..toString(2)

crée correctement la chaîne binaire "10011000", mais

152.toString(2)

lance une exception

"Erreur de syntaxe : l'identifiant commence immédiatement après le littéral numérique"

Pourquoi ? La dernière syntaxe semble plus correcte alors que la première semble très étrange !

102voto

I Hate Lazy Points 18168

A . après un nombre peut sembler ambigu. S'agit-il d'un opérateur décimal ou d'un opérateur de membre d'objet ?

Cependant, l'interprète décide que c'est une décimale, donc il vous manque l'opérateur membre.

Elle le voit comme ça :

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

Lorsque vous incluez le deuxième . vous avez une décimale suivie de l'opérateur membre.

(10.).toString();

@pedants et downvoters

El . caractère présente un ambiguïté . On peut comprendre qu'il s'agit de l'opérateur membre, ou d'une décimale, selon son emplacement. S'il n'y avait pas d'ambiguïté, il n'y aurait pas de question à poser.

L'interprétation de la spécification de la . dans cette position particulière est qu'il s'agira d'une décimale. Ceci est défini par la syntaxe du littéral numérique de l'ECMAScript.

Ce n'est pas parce que la spécification résout l'ambiguïté pour l'interpréteur JS que l'ambiguïté de l'interpréteur . Le personnage n'existe pas du tout.

101voto

Alnitak Points 143355

Le lexeur (alias "tokenizer"), lorsqu'il lit un nouveau token, et qu'il trouve pour la première fois un chiffre, continuera à consommer des caractères (c'est-à-dire des chiffres ou des lettres). un point) jusqu'à ce qu'il voit un caractère qui est no partie d'un numéro légal.

<152.> est un jeton légal (le 0 de fin n'est pas nécessaire) mais <152..> ne l'est pas, donc votre premier exemple se réduit à cette série de jetons :

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

ce qui est la séquence légale (et attendue), alors que la seconde ressemble à

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

ce qui est illégal - il n'y a pas de point séparant le numéro du toString appeler.

0voto

Anoop Points 12862

10. est un float number et vous pouvez utiliser toString sur float

eg.

parseFloat("10").toString() // "10"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X