Object.prototype.valueOf()
The valueOf() method of Object converts the this value to an object. This method is meant to be overridden by derived objects for custom type conversion logic.
Syntax
valueOf()
Parameters
None.
Return value
The this value, converted to an object.
Note: In order for
valueOfto be useful during type conversion, it must return a primitive. Because all primitive types have their ownvalueOf()methods, callingaPrimitiveValue.valueOf()generally does not invokeObject.prototype.valueOf().
Description
JavaScript calls the valueOf method to convert an object to a primitive value. You rarely need to invoke the valueOf method yourself; JavaScript automatically invokes it when encountering an object where a primitive value is expected.
This method is called in priority by numeric conversion and primitive conversion, but string conversion calls toString() in priority, and toString() is very likely to return a string value (even for the Object.prototype.toString() base implementation), so valueOf() is usually not called in this case.
All objects that inherit from Object.prototype (that is, all except null-prototype objects) inherit the toString() method. The Object.prototype.valueOf() base implementation is deliberately useless: by returning an object, its return value will never be used by any primitive conversion algorithm. Many built-in objects override this method to return an appropriate primitive value. When you create a custom object, you can override valueOf() to call a custom method, so that your custom object can be converted to a primitive value. Generally, valueOf() is used to return a value that is most meaningful for the object — unlike toString(), it does not need to be a string. Alternatively, you can add a Symbol.toPrimitive method, which allows even more control over the conversion process, and will always be preferred over valueOf or toString for any type conversion.