Nashorn中的null和undefined值不同

时间:2015-03-26 11:46:41

标签: java nashorn

我正在运行此代码

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?

3 个答案:

答案 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") 

将是"对象"