【问题标题】:Why is the HTML comment open block valid JavaScript?为什么 HTML 注释打开块是有效的 JavaScript?
【发布时间】:2013-06-14 00:12:18
【问题描述】:

在一些旧代码中,我发现了一个 JavaScript 文件,其内容被 HTML cmets 包围。

我了解在旧浏览器中这样做的原因,但不知道它在任何方面都是有效的 JavaScript。

在 Chrome 和 IE 的控制台中,<!-- 的表达式是 undefined

这是由解释器 (http://javascript.about.com/library/blhtmcmt.htm) 处理的特殊情况,仍然在 ECMAScript 标准中定义并在现代浏览器中工作,还是这些符号的组合碰巧导致 undefined

我把它读作“小于非递减”之类的东西,这在没有操作数的情况下看起来很荒谬。其中任何一个本身都会返回语法错误。

我明白为什么“使用严格”之类的东西;是有效的,但什么也不做,但我不知道 这个 代码实际上做了什么。

我可能想多了,但想了解发生了什么

【问题讨论】:

    标签: javascript theory


    【解决方案1】:

    这是浏览器和 JavaScript 引擎一直实现的非标准功能。如今,它不能从 Web 平台中删除,因为这会破坏向后兼容性。我是detailed in the JavaScript / Web ECMAScript spec

    <!-- 必须被视为 SingleLineComment 的开头 — 相当于//

    var x = true;
    <!-- x = false; // note: no syntax error
    x; // true
    

    --&gt; 位于行首,前面可选空格或 MultiLineComments,必须被视为SingleLineComment — 相当于//

    var x = true;
    --> x = false; // note: no syntax error
    x; // true
    
    var x = 1;
    /*
    multiline comment!
    x = 2;
    */ --> x = 3;
    x; // 1
    

    【讨论】:

      【解决方案2】:

      &lt;!-- 开始一个单行 Javascript 注释,信不信由你。

      这用于允许 &lt;script&gt; 块通过将所有脚本内容包装在 HTML 注释中来隐藏自己,使其对无法识别 &lt;script&gt; 标记的浏览器(例如 Netscape 2)进行隐藏。

      不应再使用它。

      【讨论】:

      • 啊哈!谢谢。现在这是有道理的。这是我正在审查的一些非常古老的 JavaScript - 他们一定是在重构或其他什么的时候把这些留在里面而忘记了它们。
      • 结束标签通常写成//--&gt;,这样在语法上也是正确的。
      猜你喜欢
      • 1970-01-01
      • 2018-06-26
      • 2011-08-01
      • 2015-02-10
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      相关资源
      最近更新 更多