Почему jslint жалуется, когда я экранирую символ ‹ в регулярном выражении?

Код: var foo = /\</;

Когда я перехожу на jslint.com и ввожу это, я получаю:

Problem at line 1 character 12: Unexpected '\'.

Раньше он говорил мне Unexpected escaped character '<' in regular expression., но времена изменились.

Так что мне просто интересно, почему? Если вы попробуете var foo = /\>/;, ему все равно, что делать с <?


person goatslacker    schedule 05.11.2011    source источник
comment
Там нет необходимости экранировать символ ‹. Кроме того, JSLint — это всего лишь систематизация случайных мнений Крокфорда. Думайте об этом как о странном чуваке на автобусной остановке, который жалуется вам на ваш код.   -  person Pointy    schedule 05.11.2011
comment
Я знаю, что нет необходимости избегать этого, отсюда и ошибка. Но почему именно этот символ... из всех ненужных символов экранировать, почему <.   -  person goatslacker    schedule 05.11.2011
comment
Я уверен, что есть причина для его решения включить это предупреждение в свое заявление. Даже если причина в том, что это глупо и запутанно.   -  person goatslacker    schedule 05.11.2011


Ответы (1)


Если у вас есть два простых div, разница очевидна:

<div> < </div> <!--Missing right angle bracket, bad markup-->
<div> > </div> <!--No problem, just a greater than text node-->

JSLint не предполагает, что сценарий является автономным файлом или находится внутри тега сценария HTML-документа. В языках разметки, таких как XUL, MXML, XAML, TVML, LZX, XHTML5 или SVG обрабатывается содержимое тега script как первый div в приведенном выше примере, поэтому l Левая угловая скобка будет выглядеть как начало тега. В этих языках используйте замену объекта или блок CDATA для переноса левой угловой скобки и символов амперсанда:

<script> 
if ( -1 &lt; 0 &amp;&amp; true !== false) {} 
</script>

<script>
<![CDATA[
if ( -2 < 0 && true !== false) {}
]]>
</script>

Ссылки

person Paul Sweatte    schedule 27.03.2012