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

Why does "\054321" produce ",321" in JavaScript?

刚刚在 Chrome 中测试:

"4321"

在控制台中输入给出:

",321"

显然 "4" 被转换为 ",",但我在 specification.

中找不到相关规则

我正在寻找此规则的正式规范。 为什么"4"会产生","

更新: 这是一个 OctalEscapeSequence,如 B 1.2 中所定义。

,的Oct代码是[​​=32=]054.

勾选这个Ascii Table

那为什么要在那个Oct码前面加上“\”呢??

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

八进制转义序列

Any character with a character code lower than 256 (i.e. any character in the extended ASCII range) can be escaped using its octal-encoded character code, prefixed with . (Note that this is the same range of characters that can be escaped through hexadecimal escapes.) To use the same example, the copyright symbol ('©') has character code 169, which gives 251 in octal notation, so you could write it as '1'.

[上面的部分是从一篇文章中收集的 here]

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

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

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

Table 2.1 JavaScript special characters

Character   Meaning
XXX           The character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, 1 is the octal sequence for the copyright symbol.

所以本质上,如果您使用 3 位转义码,它将被计算为八进制值。

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

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

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

“\054”是八进制的“,”。看这里:http://www.asciitable.com/index/asciifull.gif