【问题标题】:Does HTML comment <!-- act as a single-line comment in JavaScript, and why?HTML 注释 <!-- 在 JavaScript 中是否充当单行注释,为什么?
【发布时间】:2015-03-03 21:50:31
【问题描述】:

JavaScript 对 &lt;!-- 的具体理解程度如何?从 JavaScript 的角度来看,是不是除了 ///* */ 之外又多了一个评论?

从测试来看,JavaSript 似乎将&lt;!-- 视为//:单线

<script> <!-- alert('hi') //--> </script>

什么都不做,而

<script> <!-- 
alert('hi') //--> </script>

按预期工作。

这种行为记录在哪里?

这不是其他问题的重复:我不问为什么或是否应该使用它或如何使用它。我正式询问它在 JavaScript 中的语法和语义。这个问题很重要,并且在其他问题中没有得到回答:例如,上面指出的行为不能从其他问题及其答案中猜到(实际上这是我的动机:我上面的单行程序没有工作,而这些问题和答案对理解原因没有帮助)。

【问题讨论】:

  • 换行符在 JavaScript 中有所作为。 alert('hi') alert('bye') 无效,alert('hi')\nalert('bye') 正常。
  • “重复”并没有真正回答这个问题。这个问题不是“那些 HTML cmets 在我的脚本标记中做什么,我需要它们吗?”,而是“HTML 注释是否(以及为什么)充当 Javascript 中的单行注释?”
  • 谢谢!我知道换行符会有所作为。我不知道&lt;!-- 强制 JavaScript 忽略该行的其余部分。我想知道有多少人使用过我引用的单线,但不知道它不会起作用。其他问题与此行为无关。

标签: javascript


【解决方案1】:

从测试来看,JavaSript 似乎将&lt;!-- 视为// 一个单线

是的,正如 ES6 规范中所指定的那样,annex B

B.1.3 类 HTML 注释

Comment ::
    MultiLineComment
    SingleLineComment
    SingleLineHTMLOpenComment
    SingleLineHTMLCloseComment
    SingleLineDelimitedComment

SingleLineHTMLOpenComment ::
    <!-- SingleLineCommentCharsopt

但是,请注意附件B的描述:

本附件描述了基于 Web 浏览器的 ECMAScript 实现的各种遗留特性和其他特性。本附件中规定的所有语言特性和行为都有一个或多个不受欢迎的特性,如果没有遗留使用,将从本规范中删除。然而,大量现有网页对这些功能的使用意味着网络浏览器必须继续支持它们。本附件中的规范定义了这些遗留功能的互操作实现的要求。

这些功能不被视为核心 ECMAScript 语言的一部分。程序员在编写新的 ECMAScript 代码时不应使用或假设存在这些特性和行为。不鼓励 ECMAScript 实现实现这些功能,除非该实现是 Web 浏览器的一部分,或者需要运行与 Web 浏览器相同的旧版 ECMAScript 代码。

因此,这部分仅用于描述现有的“非官方”行为,一旦浏览器停止实现此行为,就会从规范中删除。

【讨论】:

  • 在 ES6 之前,W3C spec on scripting: "...由于相关历史原因,JavaScript 中的字符串 "&lt;!--" 中也提到了(但未指定)这种浏览器行为实际上被视为行注释开始,就像“//”一样。
猜你喜欢
  • 2015-02-10
  • 1970-01-01
  • 2011-08-01
  • 2013-10-05
  • 1970-01-01
  • 2015-11-18
  • 2011-02-08
  • 1970-01-01
  • 2012-03-17
相关资源
最近更新 更多