3

我正在尝试 Rhino 在 Java 中嵌入 Javascript。我注意到,当我评估一个在 Javascript 中将两个整数相加的脚本时,结果以 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表达式返回一个双精度而不是一个整数呢?

Javascript 本身是否在做一些我不理解的类型推广?

4

2 回答 2

3

今日趣事:javascript (ECMAScript) 中的所有数字都是双精度的。

Number 类型正好有 18437736874454810627(即 264−253+3)个值,代表二进制浮点算术的 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 只有一种数字类型 - Number,类似于 Java 的Double类型。我希望引擎强制类型Number执行算术。

于 2013-03-20T16:03:33.870 回答