在JavaScript中使用HTML注释(错误的做法)

示例

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

具有HTML注释打开顺序(<!--)的单行注释:

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

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

可以在旧版代码中观察到此技术,以从不支持JavaScript的浏览器中隐藏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文本(直到HTML文本-->也作为JavaScript被忽略)。