Rhino JS / ScriptEngine来自Java -整数输入,双输出

Rhino JS / ScriptEngine from Java - integers in, doubles out?

本文关键字:输入 整数 输出 Java JS ScriptEngine 来自 Rhino      更新时间:2023-09-26

我正在尝试用Rhino在Java中嵌入Javascript。我注意到,当我在Javascript中eval一个将两个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表达式返回double而不是int呢?

是Javascript本身做一些类型提升我不明白吗?

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

Number类型恰好有18437736874454810627(即264−253+3)值,表示双精度64位格式IEEE 754在IEEE二进制浮点标准中指定的值算术,除了9007199254740990(即253−2)不同IEEE标准的"非数字"值表示为ECMAScript作为一个特殊的NaN值

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

JavaScript只有一种数字类型- Number,它类似于Java的Double类型。我期望引擎将类型强制为Number以执行算术。