" ne renvoie pas d'erreur en Javascript? - Retrouvez les réponses et les commentaires concernant cette question" />
4
votes

Pourquoi une ligne commençant par "->" ne renvoie pas d'erreur en Javascript?

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?


4 commentaires

@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.


3 Réponses :


3
votes

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 >


0 commentaires

1
votes

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.


0 commentaires

2
votes

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.


1 commentaires

Ah et cela échoue dans Node à cause de cette mise en garde en haut de cette section. Bonne trouvaille!