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