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)
如果将代码粘贴到控制台中,请忽略''标记。 –