JavaScript Array slot/member == undefined instead of null?

Art Fiedler artfiedler at
Wed Nov 30 19:43:44 UTC 2016


I was previously using .getSlot(index) when extracting items from a
ScriptObjectMirror when that mirror was an array until I ran into
a undefined element and that is not equal to null as I had for my
condition... so I swapped .getSlot(i) with .get(Integer.toString(i))

Are getMember(), get(), and getSlot() suppose to all return the same null
or undefined value? Or is it expected to have
getMember() and getSlot() to return Undefined object and get() to return

As a side note... If this is the intended behavior this might be a better
way to get the Undefined object instead of making a
call out of nashorn to a public static method.

Here is an example... (jdk8 1.8.0_102)

Arthur Fiedler

    public static void main(String[] args) throws Exception {
        NashornScriptEngineFactory factory = new
        ScriptEngine scriptEngine = factory.getScriptEngine();
        scriptEngine.eval("globalArray = ['line1',undefined,null];");
        ScriptObjectMirror array =
        System.out.println("size(): " + array.size());
        for(int i = 0; i < array.size(); i++) {
            System.out.println("Index: " + i);
            String iStr = String.valueOf(i);
            System.out.println("    GetMember('"+iStr+"'): " +
            System.out.println("    Get('"+iStr+"'): " + array.get(iStr));
            System.out.println("    GetSlot("+iStr+"): " +
    size(): 3
    Index: 0
        GetMember('0'): line1
        Get('0'): line1
        GetSlot(0): line1
    Index: 1
        GetMember('1'): undefined
        Get('1'): null
        GetSlot(1): undefined
    Index: 2
        GetMember('2'): null
        Get('2'): null
        GetSlot(2): null

More information about the nashorn-dev mailing list