在脚本标签中是否有必要使用CDATA标签,如果是这样的话?
换句话说,何时何地:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)
比这更好:
<script type="text/javascript">
...code...
</script>
Run Code Online (Sandbox Code Playgroud) 过去,人们习惯在JavaScript块周围包装HTML注释标签,以防止"旧"浏览器显示脚本.即使是Lynx也足够聪明,可以忽略JavaScript,那么为什么有些人会继续这样做呢?这些天有没有正当理由?
<script type="text/javascript">
<!--
//some js code
//-->
</script>
Run Code Online (Sandbox Code Playgroud)
编辑:我遇到过一种情况.某些代码编辑器(如Dreamweaver)在"设计视图"中时会被JavaScript字符串中的引用HTML弄糊涂,并尝试将其显示为页面的一部分.
我正在审查一些外部商店制作的HTML.
他们在外部脚本加载标签中使用注释 - 据我所知,这只适用于非常旧的javascript unaware浏览器是否有任何现代功能或者它是多余的?
<script type="text/javascript" src="path/to/file.js"><!--//--></script>
Run Code Online (Sandbox Code Playgroud) 我在一些遗留代码中注意到以下模式:
<script>
<!--
// code
// -->
</script>
Run Code Online (Sandbox Code Playgroud)
经过一些研究,这似乎是一种非常古老的技术,用于在浏览器不支持该<script>元素时从DOM中隐藏脚本元素的内容.更多信息可以在这里找到.
我担心的是:为什么不<!--抛出语法错误?我在whatwg.org的网站上发现了它<!--应该在功能上等同于//它,并且它链接到ECMAScript语法中关于注释的片段.问题是,<!--该语法根本没有定义.
所以这似乎是所有主流浏览器都会实现的未定义行为.是否有允许这样的规范,或者这是一个人们提出的向后兼容性黑客攻击?
我最近不得不修复有时在Internet Explorer中出现的错误.错误是,有时候,解析器会像代码一样窒息
<script type="text/javascript">
<!-- // comments -->
/*...*/
</script>
Run Code Online (Sandbox Code Playgroud)
我们通过更正评论来修复.我的问题是:是" <!--"有效的JavaScript代码,还是没有?我尝试用firebug测试它,它只说"Undefined".JSFiddle没有动摇.IE有时只会在它上面窒息(重新加载有问题的页面会显示所涉及的脚本的结果).
虽然知道,由于历史原因,js中的HTML注释可能是有效的,具体取决于它的确切位置和月相确实有用,我更感兴趣的答案,如"var <!--foo是有效的js代码,但<!--它自己不是.原因如下:......"
我在萤火虫中做了一些分析:
var x = 2;
var y = 3;
var z = 0;
console.log(x);
console.log(y);
y<!--x;
console.log(x);
console.log(y);
z = y<! --x;
console.log(x);
console.log(y);
console.log(z);
Run Code Online (Sandbox Code Playgroud)
导致以下结果:
2
3
2
3
1
3
false
Run Code Online (Sandbox Code Playgroud)
第一次尝试和第二次尝试之间的区别很有趣.
然后我试过了
z = (y <!--x);
console.log(z);
Run Code Online (Sandbox Code Playgroud)
哪个失败了
SyntaxError: missing ) in parenthetical
Run Code Online (Sandbox Code Playgroud)