在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)

09-26 01:41