وحيد القرن ، النوع والارتباك autoboxing
-
27-09-2019 - |
سؤال
في امتداد جانب الخادم لـ SmartFoxServer (الذي يستخدم وحيد القرن) كان لدي قطعة من JavaScript مماثلة لهذا:
response["xpos"] = properties.get("xpos");
send(JSON.stringify(response));
هذا تسبب في أخطاء. ماذا حدث؟ لأن الخصائص هي جافا Map
, ، عندما يتم وضع رقم فيه ، يتم تلقائيًا إلى أ java.lang.Double
هدف. لذلك ، عند استرداده وتخزينه في response["xpos"]
, ، والنتيجة ليست رقم JavaScript العادي ولكن أ JavaObject
من النوع java.lang.Double
. ال JSON.stringify
لم يكن المقصود الوظيفة للتعامل مع ذلك وتحطمت.
لقد أصلحته باختراق مثل هذا:
response["xpos"] = 1.0 * properties.get("xpos");
send(JSON.stringify(response));
هل هناك طريقة أفضل؟
المحلول
يمكنك استخدام 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
هذه هي الطريقة التي يتم بها تحويل السلاسل عادة في وحيد القرن من java.lang.string إلى سلاسل JavaScript الأصلية أيضًا.
لا تنتمي إلى StackOverflow