2017-07-01 1 views
0

Les commentaires HTML sont autorisés dans Javascript, pour les navigateurs plus anciens qui ne connaissent pas les balises <script>.Chrome - Comportement d'analyse du moteur Javascript

Ref: Are HTML comments inside script tags a best practice?

Ainsi, l'analyseur JS permet <!-- au début du script, qui sera ignoré pour l'analyse. Et, --> doit être préfixé avec // afin que le moteur JS les ignore également.

Ref W3C: https://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.3.2

Tout en jouant avec cela, je l'ai vu ce comportement bizarre.

<script> 
    <!-- 
    alert(1); 
    --> 
</script> 

Ici, notez que --> ne commence pas par //, qui devrait jeter une erreur par le moteur JS Chrome. Mais, le moteur Chrome JS les considère comme des commentaires et ignore l'analyse syntaxique. Pourquoi? (Q1)

Et, un autre comportement:

<script> 
    alert(1); 
    -->''>{][} 
</script> 

Cet extrait exécutera alerte. Ici, notez l'endroit de -->. Cette séquence spécifique de caractères rend l'analyseur ignore toutes les autres valeurs incorrectes qui le suivent. Ce que je veux dire, à la place de -->, utilisez n'importe quel autre caractère/séquence, il va jeter l'erreur.

Alors, que se passe-t-il ici? Comment --> rend cet extrait de code valide? (Q2)

Remarque: --> séquence doit être préfixée avec une nouvelle ligne. C'est-à-dire que

<script> 
    <!-- 
    alert(1); -->''>{][} 
</script> 

va lancer une erreur. Encore une fois, pourquoi? (Q3)

Répondre

0

Bien! Tous les trois extraits de code que vous avez fournis me donne l'erreur en disant "Uncaught SyntaxError: Jeton inattendu <" sur Chrome.

+0

Ignorez les balises '' si vous collez le code dans la console. –