JavaScript脚本API -- JavaScript对象的属性始终为null

4
以下是我在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?非常感谢您的帮助!


那段代码中“user”在哪里定义了? - epascarello
1
你已经定义了一个名为 person 的变量,然后尝试从 user 中获取值。请改用 person.name - neuronaut
这个怎么会有这么多赞啊?哎呀 - epascarello
这么多等于1吗?但是,看起来可能是一个错别字/语法错误。 - markspace
是的,也许是这样。如果我使用JavaScript的print函数来打印布尔值,而不是将 engine.get 嵌入到Java的打印语句中,那么它就可以正常工作。 - kshah
显示剩余2条评论
1个回答

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"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接