Chrome控制台反斜杠加数字转义规则及\8\9特殊表现原因咨询
Chrome控制台反斜杠前缀数字的转义逻辑
这一现象是JavaScript的ECMAScript规范定义的遗留八进制转义序列规则导致的,并非Chrome控制台独有行为,具体逻辑如下:
- 首先明确规则适用范围:八进制转义属于旧规范遗留特性,仅在非严格模式下生效,严格模式下这类写法会直接抛出语法错误。
- 单数字转义逻辑:
八进制计数的合法数字只有0~7,因此:- 反斜杠后跟单个0~7的数字时,会直接转义为对应数值的ASCII控制字符,也就是你测试看到的
"\0"输出"\u0000"、"\7"输出"\u0007"的效果。 - 8、9不属于八进制合法字符,
\8、\9会被判定为非法转义序列,规范要求这类场景直接忽略反斜杠,返回后面的字符本身,这就是你输入"\8"得到"8"、"\9"得到"9"的原因。
- 反斜杠后跟单个0~7的数字时,会直接转义为对应数值的ASCII控制字符,也就是你测试看到的
- 多数字转义逻辑:
反斜杠后接多位数字时,会从左到右最多识别3个连续的合法八进制数字(0~7),将这部分数字按八进制转十进制的规则转换为对应码点的Unicode字符,剩余不合法的数字原样保留:- 比如
"\10":1、0都是合法八进制数字,八进制10对应十进制8,对应ASCII控制字符就是退格符\b,和你看到的输出一致;"\11"对应八进制11=十进制9,就是制表符\t,以此类推。 - 比如
"\18":仅第一个数字1是合法八进制数字,第二个数字8不合法,因此只将1转义为\u0001,剩余的8原样保留,最终输出"\u00018",和你的测试结果匹配。
- 比如
- 你看到的部分转义结果显示为
\b、\t、\f这类特殊字符,是因为这些控制字符有通用的标准转义别名,控制台会优先显示别名,没有通用别名的控制字符就会直接显示Unicode码点格式。
内容的提问来源于stack exchange,提问作者qazerty23
相关产品推荐
相关产品推荐

