我发现当我从0到7之间转义数字并提醒他们时,我会得到一个奇怪的符号:
alert( "\0" ); // or \1, \2, \3...\7
仅当我提醒它时才会显示,但document.write和console.log不会显示它。转义大于7的数字似乎没问题。我正在使用最新版本的Chrome。为什么我会得到这个奇怪的角色?感谢。
答案 0 :(得分:3)
section 7.8.4中描述了一般如何解析字符串文字。
但是,您看到的行为在Annex B.1.2中有所描述。本节介绍旧版ES中的八进制转义序列,但似乎仍然支持它。结果字符定义如下:
- OctalEscapeSequence :: OctalDigit [lookahead∉DecimalDigit] 的CV是代码单位值为OctalDigit MV的字符。
- OctalEscapeSequence :: ZeroToThree OctalDigit [lookahead∉DecimalDigit] 的CV是代码单位值为( ZeroToThree 的MV的8倍)加上MV的字符 OctalDigit 。
- OctalEscapeSequence :: FourToSeven OctalDigit 的CV是代码单位值为( FourToSeven 的MV的8倍)加上的MV的字符OctalDigit
- OctalEscapeSequence :: ZeroToThree OctalDigit OctalDigit 的CV是代码单位值为( ZeroToThree )MV的64倍(即82倍)的字符(第一个 OctalDigit 的MV的8倍)加上第二个 OctalDigit的MV 。
\x
(\xx
,\xxx
)仅在x
是八进制数字时被解释为八进制数,即0
和{{1}之间}。
因此,所有字符7
- \0
实际上都是control characters。值越高表示其他字符,例如\7
为\101
。
我无法告诉你为什么A
显示一个奇怪的角色而且控制台没有显示任何内容......这可能是一个实现细节。
有趣的事实:严格模式下不允许使用八进制转义序列。
有趣的事实#2: alert
实际上不是八进制转义序列,并且仍然可以在严格模式下工作,因为它有自己的生产规则(参见section 7.8.4) 。 OTHA,\0
是八进制序列,将在严格模式下抛出错误。