Fork me on GitHub

JSLint Error Explanations

JSLint will hurt your feelings. It's time to make them better!


Unclosed string

什么时候会产生这个错误?

JSLint和JSHint在遇到一个字符串没有在换行或者在程序末尾时闭合,会抛出"Unclosed string"的错误。在这第一个例子中,不小心忘了将字符串闭合:

在下一个例子中,我们希望字符串包含一个反斜杠。所以字符串看起来像是闭合的但事实上没有。原因是引号被转义了:

最后一个例子,在支持ECMAScript 5的环境下,字符串在程序的最后没有闭合(之前的两个例子出错是因为没有在行末闭合):

为什么会产生这个错误?

这个错误是为了强调一个JavaScript语法错误。除非你解决了这个问题,不然代码无法运行。ECMAScript语法陈述了所有的字符串字面量都必须由与开始相同的字符("或')闭合:(ES5 §7.8.4):

StringLiteral ::
    " DoubleStringCharactersopt "
    ' SingleStringCharactersopt '

解决这个错误,只需将未闭合的字符串闭合即可:

上面的第二个例子出错是因为反斜杠将闭合的引号转义了,所以需要将其转化为字符而不是语法上的结构。要在字符串中包含一个反斜杠,需要将反斜杠本身进行转义:

最后,注意上面的第三个例子,尽管我们已经到达了程序的末端,错误还是会呗抛出。由于分号会由JavaScript引擎自动插入,可以原谅你认为上述例子可以在运行的时候不会发生任何错误。但是,上述引用的语法告诉我们所有的字符串都必须闭合,因此我们必须再次将字符串闭合:

在JSHint1.0.0及以上版本中你可以通过特殊的语法来忽略任意警告。但是这个消息和严重的语法错误有关,所以你无法忽略之。


comments powered by Disqus