Java 脚本 API -- 来自 JavaScript 对象的 属性 始终为 null
Java Scripting API -- Property from JavaScript object is always null
下面是我 运行 在我的 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
?如有任何帮助,我们将不胜感激!
显然,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"));
下面是我 运行 在我的 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
?如有任何帮助,我们将不胜感激!
显然,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"));