当前位置:  开发笔记 > 编程语言 > 正文

当两个引用都指向同一个对象时,===在Nashorn中返回false

如何解决《当两个引用都指向同一个对象时,===在Nashorn中返回false》经验,为你挑选了0个好方法。

这是一个演示我面临的问题的示例:

ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine(
    new String[] { "-strict" }
);

try {
    engine.eval("function Foo(src) { this.src = src }; var e = { x: new Foo(\"what\") };");

    ScriptContext c = new SimpleScriptContext();
    c.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
    c.getBindings(ScriptContext.ENGINE_SCOPE).putAll(engine.getBindings(ScriptContext.ENGINE_SCOPE));

    System.out.println(engine.eval("var z = e.x; z === e.x;", c));
} catch(Exception e) {
    throw new RuntimeException(e);
}

我知道在另一个上下文中实例化的对象被认为是"外来的"并最终被ScriptObjectMirror实例包装.我假设这就是为什么我在这里遇到问题.我相信每当x被解除引用时,ScriptObjectMirror就会创建一个新实例; 这是唯一可以解释以下代码也返回的代码false:

System.out.println(engine.eval("e.x === e.x;", c));

有没有解决的办法?我正在寻找一些我可以用Java做的事情,或者以某种方式设置上下文/绑定,而不是用JavaScript编写代码来解决这个问题.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有