Короткий ответ: вам нужно настроить JSLint для работы с ECMAScript 5.
Это можно сделать с помощью:
/*jslint es5: true, all-your-other-jslint-options */
Длинный ответ:
Последовательность \
, за которой следует разделитель строки, до недавнего времени (версия 5, декабрь 2009 г.) фактически не была допустимой для Javascript.
Из предыдущей итерации (версия 3) стандарта ECMAScript (ECMA-262) в разделе 7.8.4 говорится: (с удаленными некоторыми ненужными записями):
StringLiteral ::
" DoubleStringCharacters(opt) "
' SingleStringCharacters(opt) '
SingleStringCharacters ::
SingleStringCharacter SingleStringCharacters(opt)
SingleStringCharacter ::
SourceCharacter but not single-quote ' or backslash \ or LineTerminator
\ EscapeSequence
Таким образом, последовательность, которую вы имеете, заканчивается последней строкой выше, одиночным \
, за которым следует элемент синтаксиса EscapeSequence
. Изучение этого дальше:
EscapeSequence ::
CharacterEscapeSequence
0 [lookahead ∉ DecimalDigit]
HexEscapeSequence
UnicodeEscapeSequence
CharacterEscapeSequence ::
SingleEscapeCharacter
NonEscapeCharacter
SingleEscapeCharacter :: one of
' " \ b f n r t v
NonEscapeCharacter ::
SourceCharacter but not EscapeCharacter or LineTerminator
EscapeCharacter ::
SingleEscapeCharacter
DecimalDigit
x
u
HexEscapeSequence ::
x HexDigit HexDigit
UnicodeEscapeSequence ::
u HexDigit HexDigit HexDigit HexDigit
Поскольку следующий символ после \
не является ни 0
, ни x
, ни u
, единственной альтернативой является CharacterEscapeSequence
, который сводится либо к SingleEscapeCharacter
(не тот случай, поскольку разделитель строки не является одним из перечисленных символов ), либо к NonEscapeCharacter
(что явно исключает признак конца строки (возможно).
Внизу этого раздела также есть примечание:
ПРИМЕЧАНИЕ. Символ «LineTerminator» не может появляться в строковом литерале, даже если ему предшествует обратная косая черта. Правильный способ сделать символ конца строки частью строкового значения строкового литерала — это использовать управляющую последовательность, такую как \n или
.
Теперь ECMAScript 5 изменил это немного. Начиная оттуда, они изменили определение SingleStringCharacter
таким образом:
SingleStringCharacter ::
SourceCharacter but not one of ' or \ or LineTerminator
\ EscapeSequence
LineContinuation
LineContinuation ::
\ LineTerminatorSequence
и изменил примечание следующим образом:
ПРИМЕЧАНИЕ. Символ конца строки не может появляться в строковом литерале, кроме как как часть LineContinuation для создания пустой последовательности символов. Правильный способ сделать символ конца строки частью значения String строкового литерала — это использовать управляющую последовательность, такую как \n или
.
И вместо того, чтобы ломать JSLint для всех существующих сценариев, авторы разумно решили сделать поддержку ECMAScript 5 необязательной, требуя изменения параметров JSLint для ее активации. Таким образом, он разрешит ECMAScript 5 только в том случае, если вы явно укажете это.
Вы можете посетить веб-сайт http://www.jslint.com/ и подтвердить это:
Code:
var xyzzy = ' \
hello";
Error:
Problem at line 1 character 16: This is an ES5 feature.
var xyzzy = ' \
Problem at line 2 character 13: Unclosed string.
hello";
Problem at line 2 character 13: Stopping. (66% scanned).
Если вы затем прокрутите вниз до раздела флагов, там будет запись для Tolerate ES5 syntax
, которая при установке удалит эту ошибку.
person
paxdiablo
schedule
11.11.2011