Rhino、typeof 和自动装箱混淆

发布于 2024-10-03 22:30:53 字数 589 浏览 3 评论 0原文

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

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

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

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

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

有更好的方法吗?

In a server side extension for SmartfoxServer (which uses Rhino) I had a piece of Javascript similar to this:

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

This caused errors. What happened? Because properties is a Java Map, when a number is put into it, it's autoboxed into a java.lang.Double object. Therefore, when retrieving it and storing it in response["xpos"], the result is not a regular Javascript number but a JavaObject of type java.lang.Double. The JSON.stringify function was not meant to handle that and it crashed.

I fixed it with a hack like this:

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

Is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初心 2024-10-10 22:30:53

您可以使用 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 字符串的方式,如下所示出色地。

You can use Number(properties.get("xpos")), as in the following interactive console session:

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

This is how strings are typically converted in Rhino from java.lang.String to native JavaScript strings as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文