Nashorn无法执行MATH功能

时间:2016-06-23 13:11:34

标签: java typeerror nashorn

我在java中使用Nashorn脚本引擎来评估表达式,

log的以下代码有效,

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("noshorn");
engine.eval("Math.log(99);");

log10失败,

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("noshorn");
engine.eval("Math.log10(99);");

它抛出异常说,

Caused by: <eval>:1 TypeError: Cannot call undefined

我该如何解决这个问题。请帮助。

3 个答案:

答案 0 :(得分:2)

默认情况下初始化的Math不是java系统Math。如果你想要java的数学使用:

var JavaMath = Java.type("java.lang.Math");

然后你可以使用所有的数学方法。我很惊讶Nashorn没有提供javascript Math Object,这将有log10。

答案 1 :(得分:1)

Nashorns current数学实施基于此version标准,但尚未包含Math.log10

@matt已经给出了一个解决方法(+1),这是另一个

engine.eval("java.lang.Math.log10(99);");

答案 2 :(得分:1)

Math.log10来自ECMAScript6 - &gt; https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10http://www.ecma-international.org/ecma-262/6.0/#sec-math.log10

Nashorn从jdk8u开始实现ECMAScript 5.1。 (很少)ES6的元素被添加到jdk9。