在提醒转义的号码时获取一个奇怪的角色

时间:2012-10-09 00:24:44

标签: javascript

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

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

Weird character

仅当我提醒它时才会显示,但document.write和console.log不会显示它。转义大于7的数字似乎没问题。我正在使用最新版本的Chrome。为什么我会得到这个奇怪的角色?感谢。

1 个答案:

答案 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是八进制序列,将在严格模式下抛出错误。