Le point "." a deux sémantiques en JavaScript
Sémantique 1. Représente le point décimal (nombre à virgule flottante) en arithmétique, tel que 2,5
Sémantique 2. Obtenir les attributs et méthodes d'objet, tels que [].push(2)
Il n’y a pratiquement rien de difficile à comprendre, mais la question suivante est intéressante.
Copiez le code comme suit :
// Comment cette ligne de code sera-t-elle exécutée ?
1.toString();
Comme suit dans Firebug
Le point ici exprime la sémantique 1 mentionnée ci-dessus, donc le point doit être suivi d'un nombre. Ce qui suit ici est toString, et la syntaxe de rapport est incorrecte.
La solution est très simple, comme ajouter des parenthèses
Copiez le code comme suit :
(1).toString();
Tu peux toujours l'écrire comme ça, mais c'est plus difficile à comprendre
Copiez le code comme suit :
1..toString();
La raison pour laquelle il peut s'exécuter dans les navigateurs est que chaque moteur JS du navigateur comprend "1..toString()" comme "1.0.toString()". Le premier point ici est la sémantique 1 et le deuxième point est la sémantique 2.
Il existe une façon encore plus étrange de l'écrire, mais aucune erreur n'est signalée.
Copiez le code comme suit :
1.toString(); // Notez qu'il y a un espace avant le point
Évidemment, le point ici est de sémantique 2, c'est-à-dire que le moteur JS ignorera les espaces avant l'opérateur point. En fait, quels que soient les espaces avant ou après, il sera ignoré. comme suit
Copiez le code comme suit :
1. toString(); // Il y a un espace avant et après le point
1. toString(); // Il y a deux espaces avant et après le point.
1.toString(); // Il y a une tabulation avant le point
1. toString(); // Il y a un onglet avant et après le point.
Le moteur JS ignorera non seulement les espaces, mais ignorera également les tabulations.