Frage

In einer serverseitigen Erweiterung für SmartFoxServer (die Rhino verwendet) hatte ich ein Stück Javascript ähnlich wie folgt aus:

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

Dies verursachte Fehler. Was ist passiert? Da Eigenschaften ein Java Map ist, wenn eine Zahl in sie gesetzt wird, wird es in ein java.lang.Double Objekt autoboxed. Daher wird, wenn es zu holen und sie in response["xpos"] speichert, ist das Ergebnis nicht regelmäßig Javascript Zahl, sondern ein JavaObject vom Typ java.lang.Double. Die JSON.stringify Funktion wurde nicht Griff bedeutet, dass es abgestürzt ist.

Ich reparierte es mit einem Hack wie folgt aus:

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

Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Sie können Number(properties.get("xpos")) verwenden, wie in der folgenden interaktiven Konsolensitzung:

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

Dies ist, wie Strings ist in der Regel in Rhino von java.lang.String nativen JavaScript-Strings als auch umgewandelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top