在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};
^ in jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)在第6列的第1行
在
jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:537)
在
jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:524)
在
jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)
在
jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155)
在
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)