JavaScript" \ 8"文字

时间:2016-02-10 19:23:02

标签: javascript specifications

我正在为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)。

所有这些差异的原因是什么?什么是正确的方法 - 如何处理涉及这些文字的其他案件?

1 个答案:

答案 0 :(得分:3)

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

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

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