Inconsistent missing property handling with java objects

Mike Rettig mike.rettig at
Wed Sep 3 14:13:11 UTC 2014

With nashorn, it seems that the assignment and accessing of missing
properties on java objects is handled as 'undefined'.


        String engine = "nashorn";
        ScriptEngineManager engineManager =
                new ScriptEngineManager();
        final ScriptEngine nashorn = engineManager.getEngineByName(engine);
        nashorn.eval("var d=new java.util.Date();");

This will print 'undefined'. It doesn't fail on the 'badProp' on the Date
object. With Rhino, this would fail on the assignment of the bad property
with the following error:

"Exception in thread "main" javax.script.ScriptException: Java class
"java.util.Date" has no public instance field or method named "badProp".
(<Unknown source>#1) in <Unknown source> at line number 1"

I want the script to fail when the bad property is referenced.  I've tried
'use strict', the rhino compatibility script, and attempting to define
on the java object. I can create a wrapper object that simply delegates to
the java object and throws if a property is undefined, but that seems

Is this the correct behavior? Is there a way to work around this behavior
in nashorn?



More information about the nashorn-dev mailing list