为啥 Javascript 会忽略单行 HTML 注释?

Posted

技术标签:

【中文标题】为啥 Javascript 会忽略单行 HTML 注释?【英文标题】:Why does Javascript ignore single line HTML Comments?为什么 Javascript 会忽略单行 HTML 注释? 【发布时间】:2015-02-10 06:10:21 【问题描述】:

我刚刚在我的浏览器(Chrome 39、Windows 8)上尝试了这段代码:-

<html>
    <body>
        <script>
        <!-- 
            document.write("<h1>Hello</h1>");       
        -->
        </script>
    </body>
</html>

这会在浏览器上生成标题文本。但是当我稍作改动时——将 HTML 注释内容放在一行中,

<html>
    <body>
        <script>
        <!-- document.write("<h1>Hello</h1>");        -->
        </script>
    </body>
</html>

这不显示任何内容。 为什么会这样?我不认为 HTML cmets 符合 javascript 标准。

附言我知道如何放置 javascript cmets。我只是想知道这种不稳定的行为。

【问题讨论】:

javascript 注释是: // 单行或 /* 多行 【参考方案1】:

这是向无法识别script 元素的浏览器隐藏javascript 的方法。第一行总是被忽略:Hiding script data from user agents

用 JavaScript 注释脚本

JavaScript 引擎允许字符串 "&lt;!--" 出现在 SCRIPT 元素的开头,并且 忽略其他字符,直到行尾。 JavaScript 将"//" 解释为开始注释并延伸到末尾 当前行。这是隐藏字符串"--&gt;" 所必需的 JavaScript 解析器。

<SCRIPT type="text/javascript">
<!--  to hide script contents from old browsers
  function square(i) 
    document.write("The call passed ", i ," to the function.","<BR>")
    return i * i
  
  document.write("The function returned ",square(5),".")
// end hiding contents from old browsers  -->
</SCRIPT>

【讨论】:

是的;需要明确的是,&lt;!-- --&gt; 语法对于 Javascript cmets 是 not 有效的。只有一种特殊的语法可以用来从完全不知道的浏览器中隐藏 Javascript。 然而,你真的不应该再使用它了。多年来,所有浏览器都知道如何处理常规的 Javascript 标记,如果它们禁用或不支持 Javascript。

以上是关于为啥 Javascript 会忽略单行 HTML 注释?的主要内容,如果未能解决你的问题,请参考以下文章

javascript的词法结构

HTML textarea 忽略第一个换行符,为啥?

JavaScript基础基础数据类型

为啥我的服务器会忽略来自 ajax 请求的身份验证标头?

JavaScript 注释

JSONP - express:为啥浏览器会忽略请求?