Module jdk.scripting.nashorn
Package jdk.nashorn.api.scripting

## Class ScriptObjectMirror

- java.lang.Object
- - jdk.nashorn.api.scripting.AbstractJSObject
  - - jdk.nashorn.api.scripting.ScriptObjectMirror

- All Implemented Interfaces:
    `Map<String,Object>`, `Bindings`, `JSObject`

      public final class ScriptObjectMirror
      extends AbstractJSObject
      implements Bindings

  Mirror object that wraps a given Nashorn Script object.
  Since:
    1.8u40

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `Map.Entry<K,V>`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Object` | `call​(Object thiz, Object... args)` | Call this object as a JavaScript function.
    `Object` | `callMember​(String functionName, Object... args)` | Call member function
    `void` | `clear​()` | Removes all of the mappings from this map (optional operation).
    `boolean` | `containsKey​(Object key)` | Returns `true` if this map contains a mapping for the specified key.
    `boolean` | `containsValue​(Object value)` | Returns `true` if this map maps one or more keys to the specified value.
    `boolean` | `delete​(Object key)` | Delete a property from this object.
    `Set<Map.Entry<String,Object>>` | `entrySet​()` | Returns a `Set` view of the mappings contained in this map.
    `boolean` | `equals​(Object other)` | Indicates whether some other object is "equal to" this one.
    `Object` | `eval​(String s)` | Evaluate a JavaScript expression.
    `ScriptObjectMirror` | `freeze​()` | ECMA 15.2.39 - freeze implementation.
    `Object` | `get​(Object key)` | Returns the value to which this map maps the specified key.
    `String` | `getClassName​()` | ECMA [[Class]] property
    `Object` | `getDefaultValue​(Class<?> hint)` | Implements this object's `[[DefaultValue]]` method as per ECMAScript 5.1 section 8.6.2.
    `Object` | `getMember​(String name)` | Retrieves a named member of this JavaScript object.
    `String[]` | `getOwnKeys​(boolean all)` | return an array of own property keys associated with the object.
    `Object` | `getOwnPropertyDescriptor​(String key)` | ECMA 8.12.1 [[GetOwnProperty]] (P)
    `Object` | `getProto​()` | Return the __proto__ of this object.
    `Object` | `getSlot​(int index)` | Retrieves an indexed member of this JavaScript object.
    `int` | `hashCode​()` | Returns a hash code value for the object.
    `boolean` | `hasMember​(String name)` | Does this object have a named member?
    `boolean` | `hasSlot​(int slot)` | Does this object have a indexed property?
    `static boolean` | `identical​(Object obj1, Object obj2)` | Are the given objects mirrors to same underlying object?
    `boolean` | `isArray​()` | Is this an array object?
    `boolean` | `isEmpty​()` | Returns `true` if this map contains no key-value mappings.
    `boolean` | `isExtensible​()` | Check if this script object is extensible
    `boolean` | `isFrozen​()` | Check whether this script object is frozen
    `boolean` | `isFunction​()` | Is this a function object?
    `boolean` | `isInstance​(Object instance)` | Checking whether the given object is an instance of 'this' object.
    `boolean` | `isSealed​()` | Check whether this script object is sealed
    `boolean` | `isStrictFunction​()` | Is this a 'use strict' function object?
    `static boolean` | `isUndefined​(Object obj)` | Utility to check if given object is ECMAScript undefined value
    `Set<String>` | `keySet​()` | Returns the set of all property names of this object.
    `Object` | `newObject​(Object... args)` | Call this 'constructor' JavaScript function to create a new object.
    `ScriptObjectMirror` | `preventExtensions​()` | Flag this script object as non extensible
    `Object` | `put​(String key, Object value)` | Set a named value.
    `void` | `putAll​(Map<? extends String,? extends Object> map)` | Adds all the mappings in a given `Map` to this `Bindings`.
    `Object` | `remove​(Object key)` | Removes the mapping for this key from this map if it is present (optional operation).
    `void` | `removeMember​(String name)` | Remove a named member from this JavaScript object
    `ScriptObjectMirror` | `seal​()` | ECMAScript 15.2.3.8 - seal implementation
    `void` | `setIndexedPropertiesToExternalArrayData​(ByteBuffer buf)` | Nashorn extension: setIndexedPropertiesToExternalArrayData.
    `void` | `setMember​(String name, Object value)` | Set a named member in this JavaScript object
    `void` | `setProto​(Object proto)` | Set the __proto__ of this object.
    `void` | `setSlot​(int index, Object value)` | Set an indexed member in this JavaScript object
    `int` | `size​()` | Returns the number of key-value mappings in this map.
    `<T> T` | `to​(Class<T> type)` | Utility to convert this script object to the given type.
    `double` | `toNumber​()` | Deprecated.
    `String` | `toString​()` | Returns a string representation of the object.
    `static Object` | `unwrap​(Object obj, Object homeGlobal)` | Unwrap a script object mirror if needed.
    `static Object[]` | `unwrapArray​(Object[] args, Object homeGlobal)` | Unwrap an array of script object mirrors if needed.
    `Collection<Object>` | `values​()` | Returns the set of all property values of this object.
    `static Object` | `wrap​(Object obj, Object homeGlobal)` | Make a script object mirror on given object if needed.
    `static Object[]` | `wrapArray​(Object[] args, Object homeGlobal)` | Wrap an array of object to script object mirrors if needed.
    `static Object` | `wrapAsJSONCompatible​(Object obj, Object homeGlobal)` | Make a script object mirror on given object if needed.

    - ### Methods inherited from class jdk.nashorn.api.scripting.AbstractJSObject

      `getDefaultValue, isInstanceOf`

    - ### Methods inherited from interface java.util.Map

      `compute, computeIfAbsent, computeIfPresent, entry, forEach, getOrDefault, merge, of, of, of, of, of, of, of, of, of, of, of, ofEntries, putIfAbsent, remove, replace, replace, replaceAll`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Method Detail

    - #### equals

          public boolean equals​(Object other)

      Description copied from class: `Object`
      Indicates whether some other object is "equal to" this one.

      The `equals` method implements an equivalence relation on non-null object references:

      - It is reflexive: for any non-null reference value `x`, `x.equals(x)` should return `true`.
      - It is symmetric: for any non-null reference values `x` and `y`, `x.equals(y)` should return `true` if and only if `y.equals(x)` returns `true`.
      - It is transitive: for any non-null reference values `x`, `y`, and `z`, if `x.equals(y)` returns `true` and `y.equals(z)` returns `true`, then `x.equals(z)` should return `true`.
      - It is consistent: for any non-null reference values `x` and `y`, multiple invocations of `x.equals(y)` consistently return `true` or consistently return `false`, provided no information used in `equals` comparisons on the objects is modified.
      - For any non-null reference value `x`, `x.equals(null)` should return `false`.

      The `equals` method for class `Object` implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values `x` and `y`, this method returns `true` if and only if `x` and `y` refer to the same object (`x == y` has the value `true`).

      Note that it is generally necessary to override the `hashCode` method whenever this method is overridden, so as to maintain the general contract for the `hashCode` method, which states that equal objects must have equal hash codes.

      Specified by:
        `equals` in interface `Map<String,Object>`
      Overrides:
        `equals` in class `Object`
      Parameters:
        `other` - the reference object with which to compare.
      Returns:
        `true` if this object is the same as the obj argument; `false` otherwise.
      See Also:
        `Object.hashCode()`, `HashMap`

    - #### hashCode

          public int hashCode​()

      Description copied from class: `Object`
      Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by `HashMap`.

      The general contract of `hashCode` is:

      - Whenever it is invoked on the same object more than once during an execution of a Java application, the `hashCode` method must consistently return the same integer, provided no information used in `equals` comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
      - If two objects are equal according to the `equals(Object)` method, then calling the `hashCode` method on each of the two objects must produce the same integer result.
      - It is not required that if two objects are unequal according to the `Object.equals(java.lang.Object)` method, then calling the `hashCode` method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

      As much as is reasonably practical, the hashCode method defined by class `Object` does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)

      Specified by:
        `hashCode` in interface `Map<String,Object>`
      Overrides:
        `hashCode` in class `Object`
      Returns:
        a hash code value for this object.
      See Also:
        `Object.equals(java.lang.Object)`, `System.identityHashCode(java.lang.Object)`

    - #### toString

          public String toString​()

      Description copied from class: `Object`
      Returns a string representation of the object. In general, the `toString` method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

      The `toString` method for class `Object` returns a string consisting of the name of the class of which the object is an instance, the at-sign character ``@`', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

      >      getClass().getName() + '@' + Integer.toHexString(hashCode())

      Overrides:
        `toString` in class `Object`
      Returns:
        a string representation of the object.

    - #### call

          public Object call​(Object thiz,
                             Object... args)

      Description copied from interface: `JSObject`
      Call this object as a JavaScript function. This is equivalent to 'func.apply(thiz, args)' in JavaScript.
      Specified by:
        `call` in interface `JSObject`
      Overrides:
        `call` in class `AbstractJSObject`
      Parameters:
        `thiz` - 'this' object to be passed to the function. This may be null.
        `args` - arguments to method
      Returns:
        result of call

    - #### newObject

          public Object newObject​(Object... args)

      Description copied from interface: `JSObject`
      Call this 'constructor' JavaScript function to create a new object. This is equivalent to 'new func(arg1, arg2...)' in JavaScript.
      Specified by:
        `newObject` in interface `JSObject`
      Overrides:
        `newObject` in class `AbstractJSObject`
      Parameters:
        `args` - arguments to method
      Returns:
        result of constructor call

    - #### eval

          public Object eval​(String s)

      Description copied from interface: `JSObject`
      Evaluate a JavaScript expression.
      Specified by:
        `eval` in interface `JSObject`
      Overrides:
        `eval` in class `AbstractJSObject`
      Parameters:
        `s` - JavaScript expression to evaluate
      Returns:
        evaluation result

    - #### callMember

          public Object callMember​(String functionName,
                                   Object... args)

      Call member function
      Parameters:
        `functionName` - function name
        `args` - arguments
      Returns:
        return value of function

    - #### getMember

          public Object getMember​(String name)

      Description copied from interface: `JSObject`
      Retrieves a named member of this JavaScript object.
      Specified by:
        `getMember` in interface `JSObject`
      Overrides:
        `getMember` in class `AbstractJSObject`
      Parameters:
        `name` - of member
      Returns:
        member

    - #### getSlot

          public Object getSlot​(int index)

      Description copied from interface: `JSObject`
      Retrieves an indexed member of this JavaScript object.
      Specified by:
        `getSlot` in interface `JSObject`
      Overrides:
        `getSlot` in class `AbstractJSObject`
      Parameters:
        `index` - index slot to retrieve
      Returns:
        member

    - #### hasMember

          public boolean hasMember​(String name)

      Description copied from interface: `JSObject`
      Does this object have a named member?
      Specified by:
        `hasMember` in interface `JSObject`
      Overrides:
        `hasMember` in class `AbstractJSObject`
      Parameters:
        `name` - name of member
      Returns:
        true if this object has a member of the given name

    - #### hasSlot

          public boolean hasSlot​(int slot)

      Description copied from interface: `JSObject`
      Does this object have a indexed property?
      Specified by:
        `hasSlot` in interface `JSObject`
      Overrides:
        `hasSlot` in class `AbstractJSObject`
      Parameters:
        `slot` - index to check
      Returns:
        true if this object has a slot

    - #### removeMember

          public void removeMember​(String name)

      Description copied from interface: `JSObject`
      Remove a named member from this JavaScript object
      Specified by:
        `removeMember` in interface `JSObject`
      Overrides:
        `removeMember` in class `AbstractJSObject`
      Parameters:
        `name` - name of the member

    - #### setMember

          public void setMember​(String name,
                                Object value)

      Description copied from interface: `JSObject`
      Set a named member in this JavaScript object
      Specified by:
        `setMember` in interface `JSObject`
      Overrides:
        `setMember` in class `AbstractJSObject`
      Parameters:
        `name` - name of the member
        `value` - value of the member

    - #### setSlot

          public void setSlot​(int index,
                              Object value)

      Description copied from interface: `JSObject`
      Set an indexed member in this JavaScript object
      Specified by:
        `setSlot` in interface `JSObject`
      Overrides:
        `setSlot` in class `AbstractJSObject`
      Parameters:
        `index` - index of the member slot
        `value` - value of the member

    - #### setIndexedPropertiesToExternalArrayData

          public void setIndexedPropertiesToExternalArrayData​(ByteBuffer buf)

      Nashorn extension: setIndexedPropertiesToExternalArrayData. set indexed properties be exposed from a given nio ByteBuffer.
      Parameters:
        `buf` - external buffer - should be a nio ByteBuffer

    - #### isInstance

          public boolean isInstance​(Object instance)

      Description copied from interface: `JSObject`
      Checking whether the given object is an instance of 'this' object.
      Specified by:
        `isInstance` in interface `JSObject`
      Overrides:
        `isInstance` in class `AbstractJSObject`
      Parameters:
        `instance` - instance to check
      Returns:
        true if the given 'instance' is an instance of this 'function' object

    - #### getClassName

          public String getClassName​()

      Description copied from interface: `JSObject`
      ECMA [[Class]] property
      Specified by:
        `getClassName` in interface `JSObject`
      Overrides:
        `getClassName` in class `AbstractJSObject`
      Returns:
        ECMA [[Class]] property value of this object

    - #### isFunction

          public boolean isFunction​()

      Description copied from interface: `JSObject`
      Is this a function object?
      Specified by:
        `isFunction` in interface `JSObject`
      Overrides:
        `isFunction` in class `AbstractJSObject`
      Returns:
        if this mirror wraps a ECMAScript function instance

    - #### isStrictFunction

          public boolean isStrictFunction​()

      Description copied from interface: `JSObject`
      Is this a 'use strict' function object?
      Specified by:
        `isStrictFunction` in interface `JSObject`
      Overrides:
        `isStrictFunction` in class `AbstractJSObject`
      Returns:
        true if this mirror represents a ECMAScript 'use strict' function

    - #### isArray

          public boolean isArray​()

      Description copied from interface: `JSObject`
      Is this an array object?
      Specified by:
        `isArray` in interface `JSObject`
      Overrides:
        `isArray` in class `AbstractJSObject`
      Returns:
        if this mirror wraps a ECMAScript array object

    - #### clear

          public void clear​()

      Description copied from interface: `Map`
      Removes all of the mappings from this map (optional operation). The map will be empty after this call returns.
      Specified by:
        `clear` in interface `Map<String,Object>`

    - #### containsKey

          public boolean containsKey​(Object key)

      Description copied from interface: `Bindings`
      Returns `true` if this map contains a mapping for the specified key. More formally, returns `true` if and only if this map contains a mapping for a key `k` such that `(key==null ? k==null : key.equals(k))`. (There can be at most one such mapping.)
      Specified by:
        `containsKey` in interface `Bindings`
      Specified by:
        `containsKey` in interface `Map<String,Object>`
      Parameters:
        `key` - key whose presence in this map is to be tested.
      Returns:
        `true` if this map contains a mapping for the specified key.

    - #### containsValue

          public boolean containsValue​(Object value)

      Description copied from interface: `Map`
      Returns `true` if this map maps one or more keys to the specified value. More formally, returns `true` if and only if this map contains at least one mapping to a value `v` such that `Objects.equals(value, v)`. This operation will probably require time linear in the map size for most implementations of the `Map` interface.
      Specified by:
        `containsValue` in interface `Map<String,Object>`
      Parameters:
        `value` - value whose presence in this map is to be tested
      Returns:
        `true` if this map maps one or more keys to the specified value

    - #### entrySet

          public Set<Map.Entry<String,Object>> entrySet​()

      Description copied from interface: `Map`
      Returns a `Set` view of the mappings contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own `remove` operation, or through the `setValue` operation on a map entry returned by the iterator) the results of the iteration are undefined. The set supports element removal, which removes the corresponding mapping from the map, via the `Iterator.remove`, `Set.remove`, `removeAll`, `retainAll` and `clear` operations. It does not support the `add` or `addAll` operations.
      Specified by:
        `entrySet` in interface `Map<String,Object>`
      Returns:
        a set view of the mappings contained in this map

    - #### get

          public Object get​(Object key)

      Description copied from interface: `Bindings`
      Returns the value to which this map maps the specified key. Returns `null` if the map contains no mapping for this key. A return value of `null` does not necessarily indicate that the map contains no mapping for the key; it's also possible that the map explicitly maps the key to `null`. The `containsKey` operation may be used to distinguish these two cases.

      More formally, if this map contains a mapping from a key `k` to a value `v` such that `(key==null ? k==null : key.equals(k))`, then this method returns `v`; otherwise it returns `null`. (There can be at most one such mapping.)

      Specified by:
        `get` in interface `Bindings`
      Specified by:
        `get` in interface `Map<String,Object>`
      Parameters:
        `key` - key whose associated value is to be returned.
      Returns:
        the value to which this map maps the specified key, or `null` if the map contains no mapping for this key.

    - #### isEmpty

          public boolean isEmpty​()

      Description copied from interface: `Map`
      Returns `true` if this map contains no key-value mappings.
      Specified by:
        `isEmpty` in interface `Map<String,Object>`
      Returns:
        `true` if this map contains no key-value mappings

    - #### keySet

          public Set<String> keySet​()

      Description copied from interface: `JSObject`
      Returns the set of all property names of this object.
      Specified by:
        `keySet` in interface `JSObject`
      Specified by:
        `keySet` in interface `Map<String,Object>`
      Overrides:
        `keySet` in class `AbstractJSObject`
      Returns:
        set of property names

    - #### put

          public Object put​(String key,
                            Object value)

      Description copied from interface: `Bindings`
      Set a named value.
      Specified by:
        `put` in interface `Bindings`
      Specified by:
        `put` in interface `Map<String,Object>`
      Parameters:
        `key` - The name associated with the value.
        `value` - The value associated with the name.
      Returns:
        The value previously associated with the given name. Returns null if no value was previously associated with the name.

    - #### putAll

          public void putAll​(Map<? extends String,? extends Object> map)

      Description copied from interface: `Bindings`
      Adds all the mappings in a given `Map` to this `Bindings`.
      Specified by:
        `putAll` in interface `Bindings`
      Specified by:
        `putAll` in interface `Map<String,Object>`
      Parameters:
        `map` - The `Map` to merge with this one.

    - #### remove

          public Object remove​(Object key)

      Description copied from interface: `Bindings`
      Removes the mapping for this key from this map if it is present (optional operation). More formally, if this map contains a mapping from key `k` to value `v` such that `(key==null ? k==null : key.equals(k))`, that mapping is removed. (The map can contain at most one such mapping.)

      Returns the value to which the map previously associated the key, or `null` if the map contained no mapping for this key. (A `null` return can also indicate that the map previously associated `null` with the specified key if the implementation supports `null` values.) The map will not contain a mapping for the specified key once the call returns.

      Specified by:
        `remove` in interface `Bindings`
      Specified by:
        `remove` in interface `Map<String,Object>`
      Parameters:
        `key` - key whose mapping is to be removed from the map.
      Returns:
        previous value associated with specified key, or `null` if there was no mapping for key.

    - #### delete

          public boolean delete​(Object key)

      Delete a property from this object.
      Parameters:
        `key` - the property to be deleted
      Returns:
        if the delete was successful or not

    - #### size

          public int size​()

      Description copied from interface: `Map`
      Returns the number of key-value mappings in this map. If the map contains more than `Integer.MAX_VALUE` elements, returns `Integer.MAX_VALUE`.
      Specified by:
        `size` in interface `Map<String,Object>`
      Returns:
        the number of key-value mappings in this map

    - #### values

          public Collection<Object> values​()

      Description copied from interface: `JSObject`
      Returns the set of all property values of this object.
      Specified by:
        `values` in interface `JSObject`
      Specified by:
        `values` in interface `Map<String,Object>`
      Overrides:
        `values` in class `AbstractJSObject`
      Returns:
        set of property values.

    - #### getProto

          public Object getProto​()

      Return the __proto__ of this object.
      Returns:
        __proto__ object.

    - #### setProto

          public void setProto​(Object proto)

      Set the __proto__ of this object.
      Parameters:
        `proto` - new proto for this object

    - #### getOwnPropertyDescriptor

          public Object getOwnPropertyDescriptor​(String key)

      ECMA 8.12.1 [[GetOwnProperty]] (P)
      Parameters:
        `key` - property key
      Returns:
        Returns the Property Descriptor of the named own property of this object, or undefined if absent.

    - #### getOwnKeys

          public String[] getOwnKeys​(boolean all)

      return an array of own property keys associated with the object.
      Parameters:
        `all` - True if to include non-enumerable keys.
      Returns:
        Array of keys.

    - #### preventExtensions

          public ScriptObjectMirror preventExtensions​()

      Flag this script object as non extensible
      Returns:
        the object after being made non extensible

    - #### isExtensible

          public boolean isExtensible​()

      Check if this script object is extensible
      Returns:
        true if extensible

    - #### seal

          public ScriptObjectMirror seal​()

      ECMAScript 15.2.3.8 - seal implementation
      Returns:
        the sealed script object

    - #### isSealed

          public boolean isSealed​()

      Check whether this script object is sealed
      Returns:
        true if sealed

    - #### freeze

          public ScriptObjectMirror freeze​()

      ECMA 15.2.39 - freeze implementation. Freeze this script object
      Returns:
        the frozen script object

    - #### isFrozen

          public boolean isFrozen​()

      Check whether this script object is frozen
      Returns:
        true if frozen

    - #### isUndefined

          public static boolean isUndefined​(Object obj)

      Utility to check if given object is ECMAScript undefined value
      Parameters:
        `obj` - object to check
      Returns:
        true if 'obj' is ECMAScript undefined value

    - #### to

          public <T> T to​(Class<T> type)

      Utility to convert this script object to the given type.
      Type Parameters:
        `T` - destination type to convert to
      Parameters:
        `type` - destination type to convert to
      Returns:
        converted object

    - #### wrap

          public static Object wrap​(Object obj,
                                    Object homeGlobal)

      Make a script object mirror on given object if needed.
      Parameters:
        `obj` - object to be wrapped/converted
        `homeGlobal` - global to which this object belongs.
      Returns:
        wrapped/converted object

    - #### wrapAsJSONCompatible

          public static Object wrapAsJSONCompatible​(Object obj,
                                                    Object homeGlobal)

      Make a script object mirror on given object if needed. The created wrapper will implement the Java `List` interface if `obj` is a JavaScript `Array` object; this is compatible with Java JSON libraries expectations. Arrays retrieved through its properties (transitively) will also implement the list interface.
      Parameters:
        `obj` - object to be wrapped/converted
        `homeGlobal` - global to which this object belongs.
      Returns:
        wrapped/converted object

    - #### unwrap

          public static Object unwrap​(Object obj,
                                      Object homeGlobal)

      Unwrap a script object mirror if needed.
      Parameters:
        `obj` - object to be unwrapped
        `homeGlobal` - global to which this object belongs
      Returns:
        unwrapped object

    - #### wrapArray

          public static Object[] wrapArray​(Object[] args,
                                           Object homeGlobal)

      Wrap an array of object to script object mirrors if needed.
      Parameters:
        `args` - array to be unwrapped
        `homeGlobal` - global to which this object belongs
      Returns:
        wrapped array

    - #### unwrapArray

          public static Object[] unwrapArray​(Object[] args,
                                             Object homeGlobal)

      Unwrap an array of script object mirrors if needed.
      Parameters:
        `args` - array to be unwrapped
        `homeGlobal` - global to which this object belongs
      Returns:
        unwrapped array

    - #### identical

          public static boolean identical​(Object obj1,
                                          Object obj2)

      Are the given objects mirrors to same underlying object?
      Parameters:
        `obj1` - first object
        `obj2` - second object
      Returns:
        true if obj1 and obj2 are identical script objects or mirrors of it.

    - #### toNumber

          @Deprecated
          public double toNumber​()

      Deprecated.
      Description copied from class: `AbstractJSObject`
      Returns this object's numeric value.
      Specified by:
        `toNumber` in interface `JSObject`
      Overrides:
        `toNumber` in class `AbstractJSObject`
      Returns:
        this object's numeric value.

    - #### getDefaultValue

          public Object getDefaultValue​(Class<?> hint)

      Description copied from interface: `JSObject`
      Implements this object's `[[DefaultValue]]` method as per ECMAScript 5.1 section 8.6.2.
      Specified by:
        `getDefaultValue` in interface `JSObject`
      Parameters:
        `hint` - the type hint. Should be either `null`, `Number.class` or `String.class`.
      Returns:
        this object's default value.