你可以在JavaScript中使用HTML注释。不仅仅是在<script>
标签中:你可以在包含的独立文件中使用它们,甚至在Node.js和Deno中也可以使用。另一方面,语法高亮没有很好的支持这一点(我看到的唯一一个完全正确的是在Firefox开发者工具中的一个),所以这些片段将显示在我的博客上有点奇怪。如下所示:
// below statement logs 1
console.log(1); <!-- log 1 -->
<!-- above statement logs 1 -->
这完全是一个历史遗留,除了实验之外,用它做任何事情都是一个坏主意。最初的目的是使不支持JavaScript的浏览器可以忽略包含HTML注释的脚本块,而不是将它们视为文本(浏览器将未知元素视为<span>
)。因此,JavaScript中的HTML注释会被忽略。这样的代码块可能看起来像这样:
<script><!--// browsers without JavaScript support think this is all in a big comment,// and so don't render this as plain textalert("Hi!");-->
</script>
虽然在过去的二十年里还没有浏览器显示脚本标记的内容(即使禁用了JavaScript),但这种行为不能从浏览器中移除,因为一些网站依赖于此。最终,此行为被添加到ECMAScript规范中,作为仅应在类似浏览器的环境中实现的遗留行为。我不确定为什么Node和Deno支持这一点:也许V8没有任何选项来禁用它?
该规范允许许多有趣的评论行为。我们可以使用与 //
相同的 <!--
用于行注释,但 -->
仅在行首有效。与实际的块注释不同,HTML-in-JS注释始终是行注释。
// Logs 1
console.log(1); // Logs 1<!-- Logs 2
console.log(3); <!-- Logs 2--> Logs 3
console.log(3);
-->
只允许在一行的开头,因为否则它将中断“转到”操作符(递减后跟大于)。