4

我已经阅读了字符串文字的词汇语法。我发现两者"\9""\7"被认为是无效的字符串文字。但是为什么alert("\9")give 9whilealert("\7")是空的(我期望的\7)?

4

2 回答 2

4

alert("\7")不会给你一个字符串,它会给你一个字符为 7 的字符串。这是因为你正在测试它的浏览器扩展了字符串文字的定义以允许八进制字符转义,如第 B.1.2 节中所述的规范

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

请注意,在符合要求的实现中,如果您处于严格模式,alert("\7")也不会工作,正如您在 Chrome、Firefox 或其他支持严格模式的浏览器中看到的那样:Live Copy | 资源

(function() {
  "use strict";

  alert("\7"); // fails
})();
于 2013-03-14T09:35:21.187 回答
3

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

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

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

于 2013-03-14T09:34:19.080 回答