SyntaxError: 八进制转义序列不能在未标记的模板字面量或严格模式代码中使用

当在 严格模式 字符串文字或未标记的模板文字中使用八进制转义序列时,会发生 JavaScript 异常“八进制转义序列不能在未标记的模板文字或严格模式代码中使用”。

消息

SyntaxError: Octal escape sequences are not allowed in strict mode. (V8-based)
SyntaxError: \8 and \9 are not allowed in strict mode. (V8-based)
SyntaxError: Octal escape sequences are not allowed in template strings. (V8-based)
SyntaxError: \8 and \9 are not allowed in template strings. (V8-based)
SyntaxError: octal escape sequences can't be used in untagged template literals or in strict mode code (Firefox)
SyntaxError: the escapes \8 and \9 can't be used in untagged template literals or in strict mode code (Firefox)
SyntaxError: The only valid numeric escape in strict mode is '\0' (Safari)

错误类型

哪里出错了?

形式为 \ 后跟任意数量数字(单个 0 除外)的 字符串转义序列 已弃用。如果您想用其代码点值表示字符,则应改为使用 \x\u 转义序列,例如 \x01\u0001,而不是 \1

未标记的模板字面量 从不允许包含八进制转义序列,无论是否处于严格模式。但是,带标签的模板字面量可以包含任何形式的转义序列,并且会导致标签函数接收到的模板数组包含 undefined

示例

八进制转义序列

js
"use strict";

"\251";

// SyntaxError: octal escape sequences can't be used in untagged template literals or in strict mode code

有效的八进制数

对于八进制转义序列,您可以改为使用十六进制转义序列

js
"\xA9";

如果您想按字面意思表示某些源文本而不解释任何转义序列,请使用 String.raw

js
String.raw`\251`; // A string containing four characters

另请参阅