我正在为Python翻译器编写JavaScript和" \ 8"和" \ 9"引起了很多问题。根据文档类似" \ 8"或" \ 9"是非法的,因为它们不是有效的八进制逃逸。 Esprima parser在这样的字面上抛出异常。然而JS引擎似乎允许它们并且它们评估为" 8"和" 9"分别。
因此:
/\8/.exec("\8")
RegExp('\\8').exec('\8')
/\8/.exec("8")
RegExp('\\8').exec('8')
所有都返回匹配,因为/ \ 8 /应与/ 8 /相同。然而,结果在JS引擎中是不一致的,有些返回匹配而其他人不同意(例如Safari' s)。
所有这些差异的原因是什么?什么是正确的方法 - 如何处理涉及这些文字的其他案件?
答案 0 :(得分:3)
You're right that the spec does not allow for it但没有人说JS引擎是完美的。
"对"处理这些情况的方法是将它们报告为语法错误,因为这在JS和Python *中都不是有效的。
*据我所知。我不会写很多Python但快速Googling似乎表明它不是。