“rhino1.7.6”与“V8”中JavaScript RegExp的不同结果

时间:2015-07-30 02:44:13

标签: javascript regex v8 rhino

目前,我发现相同的JavaScript RegExp可能会在不同的JavaScript引擎中生成不同的结果,这是一个示例: 在Chrome V8 JS引擎中,

/\x3c/.test("\x3c")  --> returns true

/\x3c/.test(function() {  return "\x3c"  }) -->returns ***false***

在rhino1.7.6中,我输入了如下命令:

>java -jar js.jar

  Rhino 1.7.6 2015 04 15

js> /\x3c/.test(function() {  return "\x3c"  })

  true

js>

我测试了这两个:

/\x3c/.test("\x3c")  --> returns true

/\x3c/.test(function() {  return "\x3c"  }) -->returns ***true***

我想知道为什么这两个引擎产生不同的结果。我相信他们必须符合某些标准。

如果我错了,请纠正我。而且,如果这是一个特殊的场合,请您告诉我是否有一些配置我可以在这些特殊场合告诉JS引擎。

1 个答案:

答案 0 :(得分:3)

给定值function() { return "\x3c" }

  • Chrome 将其转换为字符串"function() { return "\x3c" }",即字面反斜杠后跟" x3c"。

  • Rhino 将其转换为字符串"function () { return "<"; }",即重新格式化函数定义。

两者都是正确的行为。 ECMA-262(又名Javascript)标准says that String(func)应该返回&#34; func 的依赖于实现的字符串源代码表示。&#34;