JavaScript "\8" 字面量

JavaScript "\8" literal

我正在写 JavaScript 给 Python 翻译器,“\8”和“\9”给我带来了很多问题。根据文档,像“\8”或“\9”这样的东西是非法的,因为它们不是有效的八进制转义符。 Esprima parser 在这种文字上抛出异常。然而 JS 引擎似乎允许它们并且它们分别评估为“8”和“9”。

因此:

//.exec("") 
RegExp('\8').exec('')
//.exec("8") 
RegExp('\8').exec('8')

应该所有 return 匹配,因为 /\8/ 应该与 /8/ 相同。然而,跨 JS 引擎的结果不一致,有些 return 匹配,而其他则不匹配(例如 Safari 的)。

造成这些差异的原因是什么?什么是正确的方法 - 如何处理涉及这些文字的其他情况?

You're right that the spec does not allow for it但从来没有人说过JS引擎是完美的

处理这些情况的 "right" 方法是将它们报告为语法错误,因为这在 JS 和 Python* 中均无效。

*据我所知。我没有写很多 Python 但快速 Googling 似乎表明它不是。