JSHint在strict模式中遇到一个字符串字面量包含着以'0'开头的八进制转义字符串,会抛出"Octal literals are not allowed in strict mode"。在下面这个例子中我们尝试着将一个包含着八进制的字符串赋值给变量x:
这个错误是为了强调对废弃语言特性的使用。在ECMAScript5规范中,八进制序列被废弃并且不再会被使用。如果使用之,由于这个特性已经逐渐被抛弃,而使得与现有更新的JavaScript引擎不兼容。
这个消息和JSLint中的"Don't use octal: '{a}'. Use '\\u...' instead"等价。可以查阅那个页面来获取关于其起因和该错误的解决办法的更多的相关信息。
也许这个错误消息是为了一种不同的情况,当然也可能稍微有点误导人。上述例子是一个八进制转义序列的示例,而不是一个八进制字面量(ES5 Annex B.1.1):
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
这个消息背后的原因可能是V8引擎(以及其他潜在的)并不区分这两种情况的语法错误消息。但是需要记住的是在这种特殊的情况下,我们要处理的是一个八进制转义序列而不是一个八进制字面量。所以只要记住在严格模式下使用八进制字面量会产生一个语法错误,但是会让JSHint(1.0.0版本之前)发出一个不同的警告:
在JSHint1.0.0及以上版本中你可以通过一种特殊的选项语法来忽略任意警告。这个警告的标示符是W115。也就意味着你可以通过/*jshint -W115 */
告诉JSHint不再报告这个错误。