在Nashorn(来自Oracle的JDK8,最新)中使用这个简单的表达式引发异常时,我有点意外:
ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("js");
engine.eval("{a:1,b:2}");
这使
javax.script.ScriptException :: 1:6预期;但发现:{a:1,b:2};在jdk的jdk.nashorn.api.sappting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:537)的第6列第1行第1行.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:524)at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine) .java:155)at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
任何的想法 ?
假设此功能类似于javascript eval
,您将收到此错误,因为eval("{a:1,b:2}")
将{}
评估为代码块而不是对象文字。
eval("{a:1,b:2}")
该代码相当于:
{
a: 1,
b: 2
}
错误是在b: 2
线上引发的。在这里,a
成为新的labeled statement区块内的{}
。所以,如果你只用一个属性创建了一个对象文字,那就行了。
eval("{a:1}") // no errors
如果需要对象文字,则将其分配给变量
eval("var obj = {a:1,b:2}")
console.log(obj)
感谢adiga,使用
ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("js");
engine.eval("({a:1,b:2})");
解决了我的问题。 (注意禁用“代码块”的括号)