2017-07-01 70 views
0

Javascript允许HTML注释,对于不知道<script>标签的旧浏览器。Chrome浏览器 - Javascript引擎解析行为

编号:Are HTML comments inside script tags a best practice?

所以,JS解析器允许<!--在脚本的开始,这将解析被忽略。并且,-->应该以//作为前缀,以便JS引擎也忽略它们。

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

虽然玩这个,我看到了这个怪异的行为。

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

这里应注意,-->不被//,这应该抛出由Chrome JS引擎中的错误前缀。但是,Chrome JS引擎认为它们是评论,而忽略解析。为什么? (Q1)

而且,另一种行为:

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

这个片段将执行警报。在这里,请注意-->的地方。这种特定的字符序列使解析器ignore后面的所有其他不正确的值。 我的意思是代替-->,使用任何其他字符/序列,它会抛出错误。

那么,这里发生了什么? -->如何使此片段有效? (Q2)

注:-->序列应以新行为前缀。也就是,

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

会抛出一个错误。同样,为什么? (Q3)

回答

0

好吧!您提供的所有三个代码片段都会让我在Chrome上出现错误,提示“Uncaught SyntaxError:意外的令牌<”。

+0

如果将代码粘贴到控制台中,请忽略''标记。 –

相关问题