当前,我发现相同的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引擎一些配置。

最佳答案

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


Chrome将其转换为字符串"function() { return "\x3c" }",即文字反斜杠后跟“ x3c”。
Rhino将其转换为字符串"function () { return "<"; }",即重新格式化函数定义。


两者实际上都是正确的行为。 ECMA-262(也称为Javascript)标准says that String(func)应返回“与实现有关的func的String源代码表示形式”。

10-08 00:55