当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也不会抛出任何错误: