2

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

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

这导致了错误。发生了什么?因为 properties 是一个 Java Map,当一个数字被放入其中时,它会被自动装箱到一个java.lang.Double对象中。因此,在检索它并将其存储在 中时response["xpos"],结果不是一个常规的 Javascript 数字,而是一个JavaObject类型java.lang.Double。该JSON.stringify函数并不打算处理它并且它崩溃了。

我用这样的 hack 修复了它:

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

有没有更好的办法?

4

1 回答 1

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 字符串的方式。

于 2010-11-22T17:28:11.740 回答