3

JavascriptをJavaに埋め込むためにRhinoを試しています。Javascript で 2 つの int を追加するスクリプトを評価すると、結果が Double として返されることに気付きました。

ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.put("x", 3);
engine.put("y", 4);

assertEquals(3, engine.eval("x")); // OK
assertEquals(4, engine.eval("y")); // OK
assertEquals(7, engine.eval("x + y")); // FAILS, actual = (Double) 7.0

では、なぜx + y式は int ではなく double を返すのでしょうか?

Javascript自体が、私が理解できないタイプの昇格を行っていますか?

4

2 に答える 2

3

今日の豆知識: JavaScript (ECMAScript) の数値はすべて倍精度です。

Number 型には、正確に 18437736874454810627 (つまり、264−253+3) の値があり、2 進浮動小数点演算の IEEE 標準で指定されている倍精度 64 ビット形式の IEEE 754 値を表します。ただし、9007199254740990 (つまり、 , 253-2) IEEE 標準の個別の「非数」値は、ECMAScript では単一の特別な NaN 値として表されます。

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-8.1.5

于 2013-03-20T16:05:26.043 に答える
2

JavaScript には数値型が 1 つしかありません。Java のDouble型に類似したNumberです。エンジンが演算を実行するように型を強制していると思います。Number

于 2013-03-20T16:03:33.870 に答える