目前,我发现相同的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引擎。
答案 0 :(得分:3)
给定值function() { return "\x3c" }
Chrome 将其转换为字符串"function() { return "\x3c" }"
,即字面反斜杠后跟" x3c"。
Rhino 将其转换为字符串"function () { return "<"; }"
,即重新格式化函数定义。
两者都是正确的行为。 ECMA-262(又名Javascript)标准says that String(func)
应该返回&#34; func 的依赖于实现的字符串源代码表示。&#34;