CDATA标签在脚本标签中是必要的吗?如果是的话,什么时候?

换句话说,何时何地:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

更可取的是:

<script type="text/javascript">
...code...
</script>

当前回答

避免在XHTML验证期间出现XML错误。

其他回答

CDATA在任何XML方言中都是必需的,因为XML节点中的文本在作为JavaScript计算之前被视为子元素。这也是JSLint抱怨正则表达式中的<字符的原因。

参考文献

创建声明性XML UI语言 Web的未来:富客户端、富浏览器、富门户

避免在XHTML验证期间出现XML错误。

这是X(HT)ML的问题。当你在JavaScript中使用像<和>这样的符号时,例如比较两个整数,这将不得不像XML一样被解析,因此它们将标记为标记的开始或结束。

CDATA意味着下面的行(直到]]>的所有内容都不是XML,因此不应该以这种方式解析。

基本上,它允许编写XHTML和HTML两种格式的文档。问题在于,在XHTML中,XML解析器将解释脚本标记中的&、<、>字符,并导致XML解析错误。因此,你可以用实体来编写JavaScript,例如:

if (a &gt; b) alert('hello world');

但这是不切实际的。更大的问题是,如果以HTML格式读取页面,标记脚本“默认”被认为是CDATA,这样的JavaScript将无法运行。因此,如果希望同一页面使用XHTML和HTML解析器都没问题,则需要将脚本标记包含在XHTML中的CDATA元素中,而不是将其包含在HTML中。

这个技巧将CDATA元素的开始标记为JavaScript注释;在HTML中,JavaScript解析器会忽略CDATA标签(它是一个注释)。在XHTML中,XML解析器(在JavaScript之前运行)检测到它,并将直到CDATA结束的其余部分视为CDATA。

这样旧的浏览器就不会解析Javascript代码,页面也不会中断。

向后兼容。一定会喜欢的。