Короткий ответ, вам нужно настроить JSLint для поддержки ECMAScript 5.
Это можно сделать с помощью:
/*jslint es5: true, all-your-other-jslint-options */
Длинный ответ:
последовательность, за которой следует \
, за которой следует разделитель строки, фактически не был действительным Javascript до недавнего времени (версия 5, декабрь 2009 г.).
Из предыдущей итерации (версия 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' не может появляться в строковом литерале, даже если ему предшествует обратный слеш.Правильный способ заставить символ конца строки быть частью строкового литерала - это использовать escape-последовательность, такую как \ n или \ u000A.
Теперь, ECMAScript 5 изменил это немного.Исходя из этого, они изменили определение SingleStringCharacter
таким образом:
SingleStringCharacter ::
SourceCharacter but not one of ' or \ or LineTerminator
\ EscapeSequence
LineContinuation
LineContinuation ::
\ LineTerminatorSequence
и изменили примечание следующим образом:
ПРИМЕЧАНИЕ. Символ конца строки не может появляться в строкелитерал, кроме как часть LineContinuation для создания пустой последовательности символов.Правильный способ заставить символ конца строки быть частью значения String строкового литерала - использовать escape-последовательность, такую как \ n или \ u000A.
И вместо того, чтобы прерывать 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
, которая при установке удалит эту ошибку.