【问题标题】:Rhino, typeof and autoboxing confusionRhino、typeof 和自动装箱混淆
【发布时间】:2010-11-22 13:06:27
【问题描述】:

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

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

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

我用这样的 hack 修复了它:

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

有没有更好的办法?

【问题讨论】:

    标签: java javascript rhino autoboxing


    【解决方案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 字符串的方式。

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2010-09-19
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多