Rhino JS解释器与SpiderMonkey解释器 - 不同的返回值

时间:2011-10-18 08:09:26

标签: javascript

我正在使用两个不同的Javascript解释器 - 通过terminal的Rhino和SpiderMonkey。当我想在某些对象上调用例如toString()和valueOf()方法时,我得到不同的结果,取决于解释器。像这样:

**Rhino** 
  var f={x:10}  f.toString() result [object Object] 

                f.valueOf() result [object Object] 


**SpiderMonkey**
  var f={x:10}  f.toString() result  "[object Object]" //in quotes 

                f.valueOf() result ({x:10})

我知道Rhino是用Java编写的,SpiderMonkey是用C.写的。为什么我会得到不同的结果?

1 个答案:

答案 0 :(得分:2)

返回值相同,但它们的显示方式不同。 Rhino只是打印出result.toString(),其中result是您刚评估的表达式的值。在这两种情况下,你都会得到同样的结果,因为f.valueOf() === f所以f.valueOf().toString() === f.toString().toString()

SpiderMonkey似乎正在打印result.toSource(),它会在字符串周围加上引号,并将f.valueOf()格式化为对象文字。