2

我发现当我转义从 0 到 7 的数字并提醒他们时,我得到一个奇怪的符号:

alert( "\0" ); // or \1, \2, \3...\7

奇怪的性格

这仅在我提醒它时可见,但 document.write 和 console.log 不会显示它。大于 7 的转义数字看起来很好。我正在使用最新版本的 Chrome。为什么我会得到这个奇怪的角色?谢谢。

4

1 回答 1

3

一般如何解析字符串文字在第 7.8.4 节中描述。

但是,您看到的行为在附件 B.1.2中进行了描述。本节是关于旧 ES 版本中的八进制转义序列,似乎仍然受支持。结果字符定义如下:

  • OctalEscapeSequence :: OctalDigit [lookahead ∉ DecimalDigit]的 CV是代码单元值为 OctalDigit 的 MV 的字符。
  • OctalEscapeSequence :: ZeroToThree OctalDigit [lookahead ∉ DecimalDigit]的 CV是其代码单元值为(ZeroToThree 的 MV 的 8 倍)加上OctalDigit的 MV 的字符
  • OctalEscapeSequence :: FourToSeven OctalDigit的 CV是其代码单元值为(FourToSeven 的 MV 的 8 倍)加上OctalDigit的 MV 的字符
  • OctalEscapeSequence :: ZeroToThree OctalDigit OctalDigit的 CV是其代码单元值为(64(即 82)乘以ZeroToThree的 MV )加上(8 乘以第一个OctalDigit的 MV)加上第二个OctalDigit的 MV 的字符.

\x( \xx, \xxx) 仅在是八进制数字时才被解释为八进制序列x,即介于0和之间7

所以,所有的字符\0-\7实际上都是控制字符。较高的值是指其他字符,例如\101is A

我不能告诉你为什么alert显示一个奇怪的字符而控制台没有显示任何东西......这可能是一个实现细节。


有趣的事实:在严格模式下不允许八进制转义序列。

有趣的事实#2: \0实际上不是八进制转义序列,并且仍然可以在严格模式下工作,因为它有自己的生产规则(参见第 7.8.4 节)。OTHA,\00是一个八进制序列,在严格模式下会抛出错误。

于 2012-10-09T00:45:26.047 回答