Java Scripting API - JavaScript对象的属性始终为null

时间:2015-06-22 19:42:20

标签: javascript java scriptengine

以下是我在Java编译器中运行的代码:

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");

engine.put("person", "{name: 'Bob', favoriteColor: 'red'}");
System.out.println(engine.get("person.name"));

我希望这会评估为" Bob",而是它会给我null。如果我尝试只打印用户对象,它会正确地给我输出:

{name: 'Bob', favoriteColor: 'red'}

为什么person.name评估为null?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

显然put方法并不评估传递的值,但假设它是一个文字。例如,script.put("test", 5)会将文字整数值5放入名为test的变量中。

第二件事是错误的是get也没有评估其参数,但也假设它是变量的文字名称。

但是,你可以做你想要完成的事情。试试这个:

engine.eval ("var person = {name: 'Bob', favoriteColor: 'red'}");
System.out.println(((Bindings) engine.get("person")).get ("name"));