犀牛,类型和autoboxing混淆

时间:2010-11-22 13:06:27

标签: java javascript rhino autoboxing

在SmartfoxServer(使用Rhino)的服务器端扩展中,我有一段类似于此的Javascript:

response["xpos"] = properties.get("xpos");
send(JSON.stringify(response));

这导致了错误。发生了什么?因为属性是Java Map,所以当一个数字放入其中时,它会被自动装入java.lang.Double对象。因此,在检索它并将其存储在response["xpos"]中时,结果不是常规Javascript编号,而是JavaObject类型java.lang.DoubleJSON.stringify函数并不意味着处理它并且崩溃了。

我用这样的黑客修复了它:

response["xpos"] = 1.0 * properties.get("xpos");
send(JSON.stringify(response));

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Number(properties.get("xpos")),如以下交互式控制台会话中所示:

js> x=java.lang.Double(2)
2.0
js> typeof x
object
js> x instanceof java.lang.Double
true
js> y=Number(x)
2
js> typeof y
number

这是字符串通常在Rhino中从java.lang.String转换为本机JavaScript字符串的方式。