Search code examples
javanashorn

Does Nashorn return native JavaScript objects?


I'm currently using the javax implementation of Rhino. By default Rhino uses a wrapper to return Java objects. Does Nashorn have similar behaviour or does it return JavaScript objects by default?

Thanks


Solution

  • Looks like it tries its best to return sensible objects. Using this code, then changing the XXX:

    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("nashorn");
    engine.eval("function test() { return XXX; };");
    Object result = ((Invocable)engine).invokeFunction("test");
    System.out.println(result.getClass().getName());
    

    Yields:

    return 'hello world' = java.lang.String
    return 1 = java.lang.Integer
    return { name: 'Hello' } = jdk.nashorn.api.scripting.ScriptObjectMirror