为什么“\ 9”给出“9”而“\ 7”为空?

时间:2013-03-14 09:30:40

标签: javascript string lexical

我已经读过字符串文字的词法语法。我发现"\9""\7"都被认为是无效的字符串文字。 但是alert("\9")为什么9给出alert("\7")\7为空(我预期{{1}})?

2 个答案:

答案 0 :(得分:4)

alert("\7")没有为您提供字符串,它会为您提供一个字符为7的字符串。这是因为您正在测试它的浏览器扩展了字符串的定义允许八进制字符转义的文字,如Section B.1.2 of the spec中所述。

由于9不是八进制数字,\9不会被解释为八进制字符转义序列,因此反斜杠会被静默删除。

请注意,在符合规定的实施中,如果您处于严格模式,alert("\7")也无法正常工作,您可以在此处看到Chrome,Firefox或其他支持严格模式的浏览器:{{3} } | Live Copy

(function() {
  "use strict";

  alert("\7"); // fails
})();

答案 1 :(得分:3)

\7被解释为八进制字符串,并产生一个ASCII值为7的单个字符.9不适合八进制基数,因此它被解释为常规字符。反斜杠是静默删除的,因为它没有任何副作用。

另见https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Using_special_characters_in_strings

  

\XXX具有Latin-1编码的字符,在XXX0之间由最多三个八进制数377指定。例如,\251是版权符号的八进制序列。