JSLint和JSHint在遇到一个字符串没有在换行或者在程序末尾时闭合,会抛出"Unclosed string"的错误。在这第一个例子中,不小心忘了将字符串闭合:
在下一个例子中,我们希望字符串包含一个反斜杠。所以字符串看起来像是闭合的但事实上没有。原因是引号被转义了:
最后一个例子,在支持ECMAScript 5的环境下,字符串在程序的最后没有闭合(之前的两个例子出错是因为没有在行末闭合):
这个错误是为了强调一个JavaScript语法错误。除非你解决了这个问题,不然代码无法运行。ECMAScript语法陈述了所有的字符串字面量都必须由与开始相同的字符("或')闭合:(ES5 §7.8.4):
StringLiteral ::
" DoubleStringCharactersopt "
' SingleStringCharactersopt '
解决这个错误,只需将未闭合的字符串闭合即可:
上面的第二个例子出错是因为反斜杠将闭合的引号转义了,所以需要将其转化为字符而不是语法上的结构。要在字符串中包含一个反斜杠,需要将反斜杠本身进行转义:
最后,注意上面的第三个例子,尽管我们已经到达了程序的末端,错误还是会呗抛出。由于分号会由JavaScript引擎自动插入,可以原谅你认为上述例子可以在运行的时候不会发生任何错误。但是,上述引用的语法告诉我们所有的字符串都必须闭合,因此我们必须再次将字符串闭合:
在JSHint1.0.0及以上版本中你可以通过特殊的语法来忽略任意警告。但是这个消息和严重的语法错误有关,所以你无法忽略之。