以下是我在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
?任何帮助将不胜感激!
答案 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"));