【问题标题】:Chrome - Javascript engine parsing behaviorChrome - Javascript 引擎解析行为
【发布时间】:2017-07-01 11:08:36
【问题描述】:

Javascript 中允许使用 HTML cmets,适用于不知道 <script> 标记的旧版浏览器。

参考: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>

在这里,请注意--&gt; 没有以// 为前缀,这应该会由 Chrome JS 引擎引发错误。但是,Chrome JS 引擎将它们视为 cmets,并忽略解析。为什么? (第一季度)

还有,另一种行为:

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

这个 sn-p 将执行警报。在这里,注意--&gt; 的位置。这个特定的字符序列使解析器ignore 跟随它的所有其他不正确的值。 我的意思是,代替--&gt;,使用任何其他字符/序列,它会抛出错误。

那么,这里发生了什么? --&gt; 如何使这个 sn-p 有效? (第二季度)

注意:--&gt; 序列应以新行作为前缀。也就是说,

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

会抛出一个错误。再说一遍,为什么? (第三季度)

【问题讨论】:

    标签: javascript google-chrome comments javascript-engine


    【解决方案1】:

    好吧!您提供的所有三个代码 sn-ps 都会在 Chrome 上显示“Uncaught SyntaxError: Unexpected token

    【讨论】:

    • 如果将代码粘贴到控制台,请忽略 &lt;script&gt;&lt;/script&gt; 标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多