Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以从Java9Nashorn引擎运行ECMAScript 6吗_Javascript_Java_Nashorn - Fatal编程技术网

Javascript 我可以从Java9Nashorn引擎运行ECMAScript 6吗

Javascript 我可以从Java9Nashorn引擎运行ECMAScript 6吗,javascript,java,nashorn,Javascript,Java,Nashorn,Java9现在包括ECMAScript 6支持,正如。但是,它并没有解释如何使用从Java运行它。链接的Java杂志也没有对此进行解释。文章说: ----------------------- ECMAScript ECMA - 262 Edition 5.1 import javax.script.ScriptEngine; import javax.script.ScriptException; import jdk.nashorn.api.scripting.NashornScriptE

Java9现在包括ECMAScript 6支持,正如。但是,它并没有解释如何使用从Java运行它。链接的Java杂志也没有对此进行解释。文章说:

-----------------------
ECMAScript
ECMA - 262 Edition 5.1
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
...
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine("--language=es6");
try {
    engine.eval("const a = 20;\n"
            + "print(a);");
} catch (ScriptException e) {
    e.printStackTrace();
}
要激活ES6支持,请在命令行上使用
--language=ES6

这确实适用于
jjs
,但我找不到一种方法如何从Java代码中启用它。为了测试它,我使用了以下代码:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
...
ScriptEngine engine = new ScriptEngineManager().getEngineByMimeType("application/javascript");
try {
    engine.eval("const a = 20;");
} catch (ScriptException e) {
    e.printStackTrace();
}
它失败,但出现以下异常:

javax.script.ScriptException: <eval>:1:0 Expected an operand but found const
const a = 20;
^ in <eval> at line number 1 at column number 0
    [STACK TRACE OMITTED]
这是否意味着我不能从Java运行ECMAScript 6,而只能使用
jjs
?还是我错过了什么


事先谢谢。

在这里浏览纳肖恩的问题时,我无意中发现了。它的答案描述了两种传递Nashorn引擎命令行参数的方法。建议直接使用,代码如下:

-----------------------
ECMAScript
ECMA - 262 Edition 5.1
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
...
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine("--language=es6");
try {
    engine.eval("const a = 20;\n"
            + "print(a);");
} catch (ScriptException e) {
    e.printStackTrace();
}
尽管这是可行的,但它并不是一个好的解决方案,因为它使您使用的
jdk
包不是官方支持的包。表示可以使用系统属性
nashorn.args
设置参数。代码:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
...
System.setProperty("nashorn.args", "--language=es6");
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
try {
    engine.eval("const a = 20;\n"
            + "print(a);");
} catch (ScriptException e) {
    e.printStackTrace();
}
这也不是一种很好的方法,因为它依赖于:

  • 现有的Nashorn引擎可能与其他Java发行版不同,以及
  • Nashorn引擎是最新的,支持
    语言
    命令行参数

一、 就个人而言,更喜欢第一个版本,因为它会在Java 1.8上抛出一个错误,因为那里不存在NashornScriptEngineFactory,而第二个版本只会默默地忽略属性的设置

对于这个问题,我仍然愿意接受其他解决方案,因为这是有缺陷的,我不能在48小时内接受我自己的答案。仅供参考:
new NashornScriptEngineFactory()
现在不推荐使用