我正在运行此代码
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("var out;");
engine.eval("var out1 = null;");
Object m = engine.get("out");
Object m1 = engine.get("out1");
得到m == null和m1 == null。
如何确定值是未定义还是null?
答案 0 :(得分:6)
实际上,了解脚本返回的对象是undefined
的正确方法是询问ScriptObjectMirror
:
import jdk.nashorn.api.scripting.ScriptObjectMirror;
Object m = engine.get("out");
if (ScriptObjectMirror.isUndefined(m)) {
System.out.println("m is undefined");
}
替代方式,使用Nashorn内部API
您也可以通过检查其类型来执行此操作:
import jdk.nashorn.internal.runtime.Undefined;
Object m = engine.get("out");
if (m instanceof Undefined) {
System.out.println("m is undefined");
}
请注意,Nashorn没有将Undefined
类型作为公共API的一部分,因此使用它可能会有问题(他们可以在发行版之间自由更改),因此请使用ScriptObjectMirror
。刚刚在这里添加了这个好奇心......
答案 1 :(得分:4)
Java没有" undefined"的概念,因此理解这种区别需要用脚本的语言表达。我建议使用这个表达式:
Boolean isUndefined = engine.eval("out === undefined");
答案 2 :(得分:4)
我检查
engine.eval("typeof out")
将是"未定义"和
engine.eval("typeof out1")
将是"对象"