2016-10-28 1 views
0

Dans la console Chrome, testez également bord et firefoxsyntaxe opérateur point étrange Javascript

5.toFixed(2); 

obtenir

Uncaught SyntaxError: Invalid or unexpected token

en chrome.

SyntaxError: identifier starts immediately after numeric literal

dans firefox.

Expected ';'

dans le bord.

Mais le code ci-dessous

5.1.toFixed(2); 
(5).toFixed(2); 

est ok dans les trois navigateurs ci-dessus.

+2

parce que les chiffres ... aussi '5..toFixed (2)' ... –

+0

[_Retourner une chaîne contenant cette valeur numérique ** représentée en notation à virgule fixe décimale ** avec des chiffres fractionDigits après la virgule décimale ._] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.5) – Tushar

+0

Ce code est ambigu quant à ce que le premier "." signifie, soit un point décimal pour un flottant ou un séparateur de propriété de point. Il est interprété comme un point décimal, donc l'identifiant * toFixed * est inattendu. – RobG

Répondre

1

Ceci est dû à l'analyseur JavaScript en supposant que le point dans par exemple 5.toFixed(2) appartient au littéral numérique. (Comme dans 5., qui est un littéral numérique valide.) C'est parce que JavaScript analyse (au moins les littéraux numériques) avec avidité. Cependant, si vous faites (5).toFixed(2), il est clair pour l'analyseur ce que vous voulez (le point ne fait clairement pas partie du nombre littéral).

Idem avec 5.1.toFixed(2). Le deuxième point ne peut clairement pas appartenir au littéral numérique, donc l'analyseur a un meilleur temps avec lui.