Nashorn:如何区分 javascript 对象和 java 对象?

Nashorn: how do I distinguish between a javascript object and a java object?

我正在尝试找出如何在 Nashorn 上的脚本 运行 中区分 java 脚本对象和 java 对象。

我最后写了这样的东西:

function isJavaObject(oj) {
    return oj.getClass && oj.hashCode 
}

有没有更好的方法?

请注意,针对 java.lang.Object 使用 instanceof 无效

oj = {} 
oj instanceof Java.type("java.lang.Object")  // returns true 

Nashorn 有一个非 ECMA 标准的内置对象 "Java"(大写 "J"),它有很多优点,其中 Java.isJavaObject(obj) 函数 return 如果指定的对象是 Java 对象而不是脚本对象,则为真。还有 Java.isScriptObject(obj) 和 return 几乎完全相反,除了 null 这两个功能 return false.