2012-02-08 71 views
5

在以下代碼中使用//的目的是什麼?如果舊的瀏覽器不支持JavaScript,那麼符號<!-- -->將忽略js代碼。在瀏覽器支持JS的情況下,這些符號<!-- -->將被忽略。然後使用//符號。用JavaScript評論

<html> 
<body> 
<script type="text/javascript"> 
<!-- 
document.getElementById("demo").innerHTML=Date(); 
//--> 
</script> 
</body> 
</html> 

回答

7

如果舊的瀏覽器不支持JavaScript,那麼符號<!-- -->將忽略js代碼。

確實,假設HTML和「舊瀏覽器」的定義等於「Netscape 1時代」。 Don't use them today

如果瀏覽器支持JS,這些符號<!-- -->將被忽略。

只有一半是真的。只有評論的開頭是特別的。從the specification

JavaScript引擎允許字符串「<!--」發生在一個SCRIPT元素開始,並且忽略進一步字符到行的結尾。 JavaScript將「//」解釋爲開始註釋,延伸到當前行的末尾。這需要隱藏來自JavaScript解析器的字符串「-->」。

+0

很棒的答案。比我的更具體的答案! – 2012-02-08 15:26:49

+0

但是,如果我們不隱藏使用'/ /'沒有什麼更糟糕的事情發生。代碼在Firefox中應該如何運作? – sandbox 2012-02-08 15:30:16

+1

瀏覽器真的很擅長從&^%$中恢復,但並不總是一致的。 – Quentin 2012-02-08 15:38:52

4

--是一個JavaScript運算符。它不會混淆解析器。

你真的不需要這些HTML註釋了,順便說一句。

+0

但是爲什麼' - >'的意見,和'<! - '不?那麼是'<! - '有效的javascript,爲什麼(不)? – Konerak 2012-02-08 15:24:57

+0

@Konerak - 昆汀的答案更完整。 – 2012-02-08 15:25:17

1

這是一個非標準的功能,瀏覽器和JavaScript引擎一直執行。現在,它不能被刪除,因爲這會打破向後兼容性。這是detailed in the JavaScript/Web ECMAScript spec

<!--必須作爲一個SingleLineComment開始進行治療 - 相當於//

var x = true; 
<!-- x = false; // note: no syntax error 
x; // true 

-->在一行的開頭,任選由空格之前或 MultiLineComment S,必須被視爲一個SingleLineComment - 相當於//

var x = true; 
--> x = false; // note: no syntax error 
x; // true 

var x = 1; 
/* 
multiline comment! 
x = 2; 
*/ --> x = 3; 
x; // 1