当前,我发现相同的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源代码表示形式”。