我正在使用两个不同的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.写的。为什么我会得到不同的结果?
答案 0 :(得分:2)
返回值相同,但它们的显示方式不同。 Rhino只是打印出result.toString()
,其中result
是您刚评估的表达式的值。在这两种情况下,你都会得到同样的结果,因为f.valueOf() === f
所以f.valueOf().toString() === f.toString().toString()
。
SpiderMonkey似乎正在打印result.toSource()
,它会在字符串周围加上引号,并将f.valueOf()
格式化为对象文字。