在 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)。