在 JavaScript 中使用 HTML 注释(不好的做法)

HTML 注释(可选地前面有空格)将导致浏览器忽略代码(在同一行),尽管这被认为是不好的做法

HTML 注释打开序列(<!--)的单行注释:

注意: JavaScript 解释器在此处忽略 HTML 注释(-->)的结束字符。

<!-- A single-line comment.
<!-- --> Identical to using `//` since
<!-- --> the closing `-->` is ignored.

可以在遗留代码中观察到此技术,以隐藏不支持它的浏览器中的 JavaScript:

<script type="text/javascript" language="JavaScript">
<!--
/* Arbitrary JavaScript code.
   Old browsers would treat
   it as HTML code. */
// -->
</script>

HTML 结束注释也可以在行的开头使用 JavaScript(独立于开始注释)(可选地前面有空格),在这种情况下,它也会导致行的其余部分被忽略:

--> Unreachable JS code

这些事实也被利用来允许页面首先将自己称为 HTML,然后再称为 JavaScript。例如:

<!--
self.postMessage('reached JS "file"');
/*
-->
<!DOCTYPE html>
<script>
var w1 = new Worker('#1');
w1.onmessage = function (e) {
    console.log(e.data); // 'reached JS "file"
};
</script>
<!--
*/
-->

运行 HTML 时,忽略 <!----> 注释之间的所有多行文本,因此当以 HTML 格式运行时,其中包含的 JavaScript 将被忽略。

然而,作为 JavaScript,虽然忽略以 <!----> 开头的行,但它们的效果不会超过行,所以跟随它们的行(例如,self.postMessage(...)在作为 JavaScript 运行时不会被忽略,至少在它们到达之前一个 JavaScript 评论,标记为/**/。在上面的示例中使用了这样的 JavaScript 注释来忽略剩余的 HTML 文本(直到 --> 也被忽略为 JavaScript)。