Rhino、typeof 和自动装箱混淆
在 SmartfoxServer 的服务器端扩展(使用 Rhino)中,我有一段与此类似的 Javascript:
response["xpos"] = properties.get("xpos");
send(JSON.stringify(response));
这导致了错误。发生了什么?因为 properties 是一个 Java Map
,所以当将数字放入其中时,它会自动装箱到 java.lang.Double
对象中。因此,当检索它并将其存储在 response["xpos"]
中时,结果不是常规的 Javascript 数字,而是 java.lang 类型的
。 JSON.stringify 函数本来不应该处理这个问题,所以它崩溃了。JavaObject
。双倍
我用这样的黑客修复了它:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
Number(properties.get("xpos"))
,如以下交互式控制台会话所示:这是在 Rhino 中通常将字符串从 java.lang.String 转换为本机 JavaScript 字符串的方式,如下所示出色地。
You can use
Number(properties.get("xpos"))
, as in the following interactive console session:This is how strings are typically converted in Rhino from java.lang.String to native JavaScript strings as well.