Je reçois cette erreur JavaScript sur ma console :
Non interceptée SyntaxError : Illégale de jeton inattendu
Il s’agit de mon code :
C’est super simple, comme vous pouvez le voir. Comment pourrait il être la cause une erreur de syntaxe ?
Je reçois cette erreur JavaScript sur ma console :
Non interceptée SyntaxError : Illégale de jeton inattendu
Il s’agit de mon code :
C’est super simple, comme vous pouvez le voir. Comment pourrait il être la cause une erreur de syntaxe ?
Lorsque le code est exécuté par l'interpréteur JavaScript, il est cassé en morceaux appelés "jetons". Quand un pion ne peut pas être classés dans l'une des quatre types de jeton, il obtient la mention "ILLÉGAL" sur la plupart des implémentations, et cette erreur est levée. La même erreur est déclenchée si, par exemple, vous essayez d'exécuter un fichier js avec un rogue @
caractère quelque part, par exemple.
Il y a un personnage invisible dans le code, juste après le point-virgule. C'est de l' Unicode U+200B
Zéro-largeur de l'espace de caractère (un.k.un. ZWSP
, En entité HTML ​
). Ce personnage est connu pour causer la Unexpected token ILLEGAL
JavaScript erreur de syntaxe.
Je ne peux pas dire pour sûr, mais mon pari est sur jsfiddle. Si vous collez le code à partir de là, il est très probable à une ou plusieurs U+200B
caractères. Il semble que l'outil utilise que des caractères de contrôle mot d'habillage sur de longues cordes.
Mise à JOUR 2013-01-07
Après la dernière jsfiddle mise à jour, il montre maintenant le personnage comme un point rouge comme codepen. Apparemment, c'est pas l'insertion d'
U+200B
caractères sur son propre de plus, afin que ce problème devrait être moins fréquentes à partir de maintenant.
Il a aussi été rapporté que le code collé à partir du Chrome developer tools peut comprendre ce personnage, mais j'ai été incapable de se reproduire qu'avec la version actuelle (22.0.1229.79 sur OSX).
Le personnage est invisible, comment savons-nous qu'il est là? Vous pouvez demander à votre éditeur pour afficher les caractères invisibles. La plupart des éditeurs de texte ont cette fonctionnalité. Vim, par exemple, les affiche par défaut, et l' ZWSP
montre que <u200b>
. Vous pouvez également le débogage en ligne: jsbin affiche le caractère comme un point rouge sur son code volets (mais semble pour le supprimer après l'enregistrement et le rechargement de la page). CodePen.io affiche également comme un point, et la maintient même après l'enregistrement.
Ce caractère n'est pas quelque chose de mauvais, il peut effectivement être très utile. Cet exemple sur Wikipedia montre comment il peut être utilisé pour contrôler l'emplacement d'une longue chaîne doit être renvoyé à la ligne suivante. Toutefois, si vous ne connaissez pas le personnage de la présence sur votre balisage, il peut devenir un problème. Si vous avez à l'intérieur d'une chaîne de caractères (par exemple, l' nodeValue
d'un élément du DOM qui n'a pas de contenu visible), vous pouvez vous attendre une telle chaîne vide, alors qu'en fait il ne l'est pas (même après l'application d' String.trim
).
ZWSP
peut également causer un espace afin d'être affiché sur une page HTML, par exemple lorsqu'il se trouve entre les deux <div>
- éléments (comme on le voit sur cette question). Ce cas n'est même pas reproductible sur jsfiddle, puisque le personnage est ignoré.
Un autre problème potentiel: si la page web de codage n'est pas reconnu en tant que UTF-8, le personnage peut effectivement être affiché ( ​
en latin1, par exemple).
Si ZWSP
est présent sur le code CSS (code en ligne, ou une feuille de style externe), le style peut également ne pas être analysée correctement, de sorte que certains styles ne sont pas appliquées (comme on le voit sur cette question).
Je ne pouvais pas trouver toute mention à caractère spécifique sur la Spécification ECMAScript (versions 3 et 5.1). La version actuelle mentionne caractères similaires (U+200C
et U+200D
) sur la Section 7.1, ce qui indique qu'ils devraient être traités comme des IdentifierPart
s lors de l' "en dehors des commentaires, des littéraux de chaîne, et littéraux d'expressions régulières". Ces caractères peuvent, par exemple, faire partie d'un nom de variable (et var x\u200c;
en effet des œuvres).
La Section 7.2 liste les valide les espaces Blancs (comme tab, espace, no-break space, etc.), et vaguement mentionne que toute autre Unicode "espace comme séparateur" (catégorie "Zs") doit être considérée comme un espace blanc. Je ne suis probablement pas la meilleure personne pour discuter des spécifications à ce sujet, mais il me semble qu' U+200B
doit être considéré comme un espace blanc en fonction de qui, quand, en fait, la mise en œuvre (au moins Chrome et Firefox) apparaissent de les traiter comme un jeton inattendu (ou en partie), provoquant l'erreur de syntaxe.
pourquoi vous la recherche de ce problème dans votre code? Même, si c'est copypasted.
Si vous pouvez le voir, exactement ce qui se passe après enregistrer le fichier dans le dossier synchronisé - vous verrez quelque chose qui ressemble *****
à la fin du fichier. Il n'est pas lié à votre code.
Solution.
Si vous utilisez nginx
dans vagrant box - ajouter à la configuration du serveur:
sendfile off;
La Source du problème: VirtualBox Bug
Cela aussi pourrait être le cas si vous copiez du code d’un autre document (comme un fichier PDF) sur votre console et essayer de le lancer.
J’ai essayé d’exécuter des exemples de code d’un livre de Javascript je suis lecture et a été surpris qu'il n’a pas couru dans la console.
Apparemment, copie à partir du fichier PDF présente certains caractères inattendus, illégales et invisibles dans le code.
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.