Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Object 实例的 valueOf() 方法将 this 值转换成对象。该方法旨在被派生对象重写,以实现自定义类型转换逻辑。
无。
转换成对象的 this 值。
备注:为了使 valueOf 在类型转换过程中有用,它必须返回一个基本类型值。因为所有的基本类型都有自己的 valueOf() 方法,所以调用 aPrimitiveValue.valueOf() 通常不会调用 Object.prototype.valueOf()。
JavaScript 调用 valueOf 方法来将对象转换成基本类型值。你很少需要自己调用 valueOf 方法;当遇到需要基本类型值的对象时,JavaScript 会自动的调用该方法。
强制数字类型转换和强制基本类型转换优先会调用该方法,而强制字符串转换会优先调用 toString(),并且 toString() 很可能返回字符串值(甚至对于 Object.prototype.toString() 基本实现也是如此),因此在这种情况下不会调用 valueOf()。
从 Object.prototype 继承的所有对象(即,除了null 原型对象之外的所有对象)都继承了 toString() 方法。Object.prototype.valueOf() 的基本实现被有意设计为无用的:返回一个对象;其返回值将永远不会被任何基本类型转换算法使用。许多内置对象重写此方法以返回适当的基本类型值。创建自定义对象时,可以重写 valueOf() 来调用自定义方法,以便将自定义对象转换为基本类型值。通常,valueOf() 用于返回对对象具有意义的值——与 toString() 不同,它不需要字符串。或者,你可以添加一个 [Symbol.toPrimitive]() 方法,该方法允许对转换过程进行更多控制,并且对于任何类型的转换,始终优先于 valueOf 或 toString。
基本的 valueOf() 方法返回 this 值本身,如果尚未转换为对象,则转换成对象。因此,任何基本类型转换算法都不会使用它的返回值。
你可以创建一个要调用的函数来代替默认的 valueOf 方法。你的函数不应该接受任何参数,因为在类型转换期间调用它时不会传递任何参数。
例如,你可以将 valueOf 方法添加到自定义类 Box 中。
有了前面的代码,任何时候在将 Box 类型的对象表示为基本类型值(但不是特定的字符串)的上下文中使用时,JavaScript 都会自动调用前面代码中定义的函数。
对象的 valueOf 方法通常由 JavaScript 调用,但你可以按照如下方式自己调用它:
一元加(+)对其操作数进行强制数字转换,对于大多数没有 [Symbol.toPrimitive]() 的对象,这意味着调用其 valueOf()。但是,如果对象没有自定义的 valueOf() 方法,则基本实现将导致忽略 valueOf(),而使用 toString() 的返回值。
| ECMAScript® 2027 Language Specification # sec-object.prototype.valueof |
启用 JavaScript 以查看此浏览器兼容性表。