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

当JSLint遇到一个顺带着0~7的数字转义字符字符串字面量时,会抛出"Don't use octal: '{a}'. Use '\u...' instead"的错误。在下面的例子中,我们尝试着将一个字符串赋值给变量x。八进制的转义字符\251对应着copyright的符号 ©:

为什么会产生这个错误?

这个错误是为了强调废弃语言特性的使用。根据ECMAScript5标准,八进制序列已经被废弃了并且不再会被使用。这样使用相当于冒着和最新的JavaScript引擎不兼容的危险。

最新的规范包含了以下内容(ES5 B.1):

Past editions of ECMAScript have included additional syntax and semantics for specifying octal literals and octal escape sequences. These have been removed from this edition of ECMAScript.

如果你要使用转义字符序列,你仍可以使用16进制或者unicode的字符序列。两者都在ECMASCript5中被定义了(ES5 A.1):

EscapeSequence ::
    CharacterEscapeSequence
    0 [lookahead ∉DecimalDigit]
    HexEscapeSequence
    UnicodeEscapeSequence

JSLint更建议你使用unicode而不是等价的16进制序列。这样做的原因是unicode的序列可以比16进制序列所提供的256个字符提供更多,并且JSON规范中只允许unicode转义。尽管他们的名字不同,两者都使用的是16进制数字。以下仍是上述的例子,但是使用的是unicode转义代替:

但是,如果你想要使用16进制转义,JSLint也不会抛出任何错误: