Pourquoi la première ligne ci-dessous donne-t-elle une erreur bien que la deuxième et la troisième ligne fonctionnent bien?
1.toString(); // SyntaxError (1).toString(); // OK 1['toString'](); // OK
L'analyseur essaie de traiter 1.
comme début de littéral à virgule flottante – uniquement pour toString
transforme en un nombre invalide.
Comparer avec:
1.0.toString()
Le .
Présente une ambiguïté. Est-ce une décimale ou un accessoire de propriété?
L'interprète le voit comme une décimale, donc vous pouvez utiliser ..
pour permettre à la fois la décimale, puis la syntaxe de la propriété.
1..toString();
Ou utilisez l'une des autres manières que vous montrez pour résoudre l'ambiguïté.
Dans (1).toString()
, (1) l'oblige à évaluer avant .toString () afin qu'il fonctionne. Dans 1.toString()
, 1 n'est pas un identifiant valide, donc il ne fonctionne pas.