Obsolete since JavaScript 1.8.5
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
Warning: JSObjectOps
is not a supported API. Details of the API may change from one release to the next. This documentation should be considered SpiderMonkey internals documentation, not API documentation. See bug 408416 for details.
The JavaScript engine calls the JSObjectOps.defaultValue
and JSClass.convert
callbacks to convert objects to primitive values.
Syntax
typedef JSBool (*JSConvertOp)(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
Name | Type | Description |
---|---|---|
cx |
JSContext * |
Pointer to the JS context in which the conversion is needed. |
obj |
JSObject * |
The object to be converted. |
type |
JSType |
The target type. |
vp |
jsval * |
Out parameter. On success, the callback must store the converted value here. |
Description
The JSObjectOps.defaultValue
callback corresponds to the [[DefaultValue]] method defined in ECMA 262-3 §8.6.2.6. Many expressions in the ECMAScript language, such as a+b
, involve implicit conversion of the operands using [[DefaultValue]].
The default [[DefaultValue]] behavior for ordinary objects is as described in ES5 §8.12.8. It calls the JavaScript methods obj.valueOf()
and/or obj.toString()
. Provide a custom JSObjectOps.defaultValue
callback to implement customized [[DefaultValue]] behavior.
The JSClass.convert
callback should convert obj
to the given type
, returning JS_TRUE
with the resulting value in *vp
on success, and returning JS_FALSE
on error or exception. On success, *vp
must be a primitive value: per ES5 §8.12.8, every object "must ensure that its [[DefaultValue]] internal method can return only primitive values." Debug builds of SpiderMonkey will assert if a convert callback is successful but leaves *vp
holding a primitive value.
JS_ConvertStub
implements the default behavior for the JSClass.convert
hook, which is to call obj.valueOf()
and obj.toString()
in accordance with the algorithm in ES5 §8.12.8.