" ne renvoie pas d'erreur en Javascript? - Retrouvez les réponses et les commentaires concernant cette question" />
Considérez les trois lignes suivantes de Javascript.
⺠1 ⺠3
Je m'attendrais à ce que cela provoque une Erreur de syntaxe
, probablement quelque chose comme Jeton inattendu -
.
Au lieu de cela, les navigateurs semblent pour accepter le code, et simplement ignorer la deuxième ligne, produisant le résultat:
console.log(1); --> console.log(2); console.log(3);
J'ai essayé de coller l'extrait dans les consoles de Chrome, Safari et Firefox. Tous se comportent de la même manière. Que se passe-t-il?
3 Réponses :
Cela fait partie d'un commentaire HTML pour un navigateur plus ancien avec le modèle d'avoir des parties Javascript dans les navigateurs qui ne prennent pas en charge la balise .
<script> <!-- // some code --> </script>
p >
Déconner avec la console semble prouver le cas de Nina
--> undefined typeof --> Uncaught SyntaxError: Unexpected token > --> = "foo" undefined --> undefined --< Uncaught SyntaxError: Unexpected token < <-- Uncaught SyntaxError: Unexpected token < <!-- undefined <!-- foo --> undefined
Il semble que ces mots-clés sont définis pour toujours renvoyer indéfini.
Apparemment, ECMAScript autorise officiellement les commentaires "HTML like" :
B.1.3 Commentaires de type HTML
La syntaxe et la sémantique de 11.4 sont étendues comme suit, sauf que cette extension n'est pas autorisée lors de l'analyse du code source à l'aide du module de symbole d'objectif:
HTMLCloseComment:: WhiteSpaceSequence opt SingleLineDelimitedCommentSequence opt --> SingleLineCommentChars opt
Ce qui suggère que tout ce qui vient après -->
doit être traité comme un commentaire.
Ah et cela échoue dans Node à cause de cette mise en garde en haut de cette section. Bonne trouvaille!
@Pointy Quel contexte précisément? Fonctionne partout où j'ai essayé, y compris Node.js
Il se comporte de la même manière dans Node.js (v8.9.4) lorsque je l'exécute à partir d'un fichier .js (
node index.js
)Eh bien, cela a échoué pour moi (10.15.0) mais en tout cas vous avez trouvé la règle (surprenante, pour moi) dans la grammaire. Je suis sûr que c'est là pour le code ancien, même si cela semble être une bizarrerie extrêmement méchante qui pourrait vraiment gâcher la journée :)
J'ai supprimé mes commentaires incorrects.