2011-11-05 2 views
6

Il codice: var foo = /\</;Perché jslint si lamenta quando sfuggo il <carattere in una RegEx?

Quando vado a jslint.com ed entro che, ottengo:

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

Ha usato me Unexpected escaped character '<' in regular expression., ma i tempi sono cambiati raccontare.

Quindi sono solo curioso, perché? Se provi a var foo = /\>/; non importa, qual è l'accordo con <?

+5

Non c'è bisogno di sfuggire alla "<" personaggio lì. Anche JSLint è solo la codifica delle opinioni casuali di Crockford. Pensalo come un tipo strano a una fermata dell'autobus che si lamenta del tuo codice. – Pointy

+0

So che non c'è bisogno di evitarlo, quindi l'errore. Ma perché quel personaggio in particolare ... tra tutti i personaggi non necessari da sfuggire, perché '<'. – goatslacker

+0

Sono sicuro che c'è una ragione per la sua decisione di includere quell'avvertimento nella sua domanda. Anche se la ragione è "è stupido e confuso". – goatslacker

risposta

3

Se si dispone di due div semplici, la differenza è evidente:

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

JSLint non si assume che lo script è un file stand-alone o all'interno di un tag script di un documento HTML. Nei linguaggi di markup come XUL, MXML, XAML, TVML, LZX, XHTML5 o SVG, il contenuto del tag di script viene trattato come il primo div nell'esempio precedente, pertanto la parentesi angolare sinistra assomiglia all'inizio di un tag. In queste lingue, utilizzare un sostituto un'entità o di un blocco CDATA per avvolgere l'angolazione della staffa e ampersand caratteri a sinistra:

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

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

Riferimenti