为什么 “54321” 在 JavaScript 中会产生 “,321”

Why does "54321" produce ",321" in JavaScript?

本文关键字:JavaScript 54321 为什么      更新时间:2023-09-26

刚刚在Chrome中测试:

"'054321"

在控制台中输入给出:

",321"

显然"'054"被转换为",",但我未能在规范中找到规则。

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

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

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

您可以在值、变量和文字中找到更多信息 - JavaScript |MDN 页面指定:

表 2.1 JavaScript 特殊字符

字符  含义
          XXX 具有拉丁语 1 编码的字符,由最多三个八进制数字指定,XXX 0377 之间。例如,'251是版权符号的八进制序列。

因此,从本质上讲,如果您使用 3 位数字的转义码,它将被评估为八进制值。

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

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

Oct 代码是 054

查看此 ASCII 表

那为什么你必须在那个 Oct 代码之前加上"''"呢?

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

八进制转义序列

字符代码

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

[上半部分摘自此处的一篇文章]

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

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

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