HTML
Синтаксический анализатор HTML будет обрабатывать все между <script>и </script>как часть сценария. Некоторым реализациям даже не нужен правильный закрывающий тег; они останавливают интерпретацию сценария на " </", что является правильным в соответствии со спецификациями .
Обновление В HTML5 и с текущими браузерами это уже не так.
Так, в HTML, это не возможно:
<script>
var x = '</script>';
alert(x)
</script>
CDATAСекция не имеет никакого эффекта вообще . Вот почему вам нужно написать
var x = '<' + '/script>'; // or
var x = '<\/script>';
или похожие.
Это также относится к файлам XHTML, которые используются в качестве text/html. (Поскольку IE не поддерживает типы контента XML, это в основном верно.)
XML
В XML применяются другие правила. Обратите внимание, что браузеры (не IE) используют синтаксический анализатор XML, только если документ XHMTL обслуживается с типом содержимого XML.
Для синтаксического анализатора XML scriptтег не лучше, чем любой другой тег. В частности, узел сценария может содержать нетекстовые дочерние узлы, запускаемые знаком " <"; и знак « &» обозначает символьную сущность.
Таким образом, в XHTML, это не возможно:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Чтобы обойти это, вы можете поместить весь сценарий в CDATAраздел. Это говорит синтаксическому анализатору: «В этом разделе не рассматривайте« <»и« &«как управляющие символы» . Чтобы механизм JavaScript не интерпретировал метки « <![CDATA[» и « ]]>», их можно заключить в комментарии.
Если ваш сценарий не содержит ни « <», ни « &», вам все равно не нужен CDATAраздел.