为什么“\ 054321”在JavaScript中产生“,321”?

时间:2015-01-09 08:54:46

标签: javascript grammar

刚刚在Chrome中测试过:

"\054321"
在控制台中输入

给出:

",321"

显然"\054"已转换为",",但我未能在specification中找到相关规则。

我正在寻找这条规则的正式规范。 为什么"\054"会产生","

更新:这是OctalEscapeSequenceB 1.2中定义。

4 个答案:

答案 0 :(得分:5)

如果查看ascii table,您会发现八进制值054(十进制:44)是一个逗号。

您可以在指定的Values, variables, and literals - JavaScript | MDN页面上找到更多信息:

  

表2.1 JavaScript特殊字符

     

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

基本上,如果你使用3位数的转义码,它将被评估为八进制值。

那就是说,请注意,八进制转义符是deprecated in ES5这些已从此版本的ECMAScript 中删除),您应该使用十六进制或unicode转义码({{1} }或\XX)。

如果您希望使用文字字符串\uXXXX,则只需使用双反斜杠:\012345

答案 1 :(得分:2)

的十月代码为 054

选中此Ascii Table

为什么你必须在10月代码之前加上“\”?

通过快速搜索,您将找到许多解决方案。但是这个给了我一个更好的澄清。

八进制转义序列

  

任何字符代码低于256的字符(即扩展ASCII范围内的任何字符)都可以使用前缀为的八进制编码字符代码进行转义。 (请注意,这是可以通过十六进制转义转义的相同字符范围。)   要使用相同的示例,版权符号('©')具有字符代码169,它以八进制表示法给出251,因此您可以将其写为'\ 251'。

[上半部分来自一篇 here的文章

您可以从该文章中找到一些例外情况。

答案 2 :(得分:0)

因为在字符串中使用\,就像在其他语言(如C或Python)中一样,意味着一个特殊字符,例如\ r \ n作为回车符或\ n作为换行符。在这种情况下,它是昏迷的ascii值,即054。

答案 3 :(得分:0)

" \ 054"是","的八进制数。见这里:http://www.asciitable.com/index/asciifull.gif