我发现当我转义从 0 到 7 的数字并提醒他们时,我得到一个奇怪的符号:
alert( "\0" ); // or \1, \2, \3...\7
这仅在我提醒它时可见,但 document.write 和 console.log 不会显示它。大于 7 的转义数字看起来很好。我正在使用最新版本的 Chrome。为什么我会得到这个奇怪的角色?谢谢。
我发现当我转义从 0 到 7 的数字并提醒他们时,我得到一个奇怪的符号:
alert( "\0" ); // or \1, \2, \3...\7
这仅在我提醒它时可见,但 document.write 和 console.log 不会显示它。大于 7 的转义数字看起来很好。我正在使用最新版本的 Chrome。为什么我会得到这个奇怪的角色?谢谢。
一般如何解析字符串文字在第 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
实际上都是控制字符。较高的值是指其他字符,例如\101
is A
。
我不能告诉你为什么alert
显示一个奇怪的字符而控制台没有显示任何东西......这可能是一个实现细节。
有趣的事实:在严格模式下不允许八进制转义序列。
有趣的事实#2: \0
实际上不是八进制转义序列,并且仍然可以在严格模式下工作,因为它有自己的生产规则(参见第 7.8.4 节)。OTHA,\00
是一个八进制序列,在严格模式下会抛出错误。