MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

Object.prototype.valueOf()

valueOf() 方法返回指定对象的原始值。

语法

object.valueOf()

返回值

返回值为该对象的原始值。

描述

JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值) 你很少需要自己调用此函数;当遇到一种需要转换成一个原始值情况时候, JavaScript 会自动调用此函数。

默认情况下, valueOf() 会被每个对象Object继承。每一个内置对象都会覆盖这个方法为了返回一个合理的值,如果对象没有原始值,valueOf() 就会返回对象自身。

 

你可以在自己的代码中使用 valueOf 方法用来把内置对象的值转换成原始值。 当你创建了自定义对象时,你可以覆盖 Object.prototype.valueOf() 并调用来取代 Object 方法。

覆盖自定义对象的 valueOf 方法

你可以创建一个取代 valueOf 方法的函数,你的方法必须不能传入参数。

假设你有个对象叫 myNumberType 而你想为它创建一个 valueOf 方法。 下面的代码为valueOf方法赋予了一个用户自定义函数:

myNumberType.prototype.valueOf = function() { return customPrimitiveValue; };
 

有了这样的一个方法,下一次每当 myNumberType 要被转换为原始类型值时, JavaScript 在此之前会自动调用自定义的 valueOf 方法。

valueOf 方法一般都会被 JavaScript 自动调用,但你也可以像下面代码显示的那样自己去调用:

myNumber.valueOf()

注意: Objects 是字符串时,转换是调用 toString() 方法, 这个和 String 对象转换为原始类型的字符串所用的 valueOf是不一样的. 每个对象都自己的字符串转换方法, if only "[object type]". 但是很多对象不转换成 number, boolean, 或 function.

示例

使用 valueOf

function myNumberType(n) {
    this.number = n;
}

myNumberType.prototype.valueOf = function() {
    return this.number;
};

myObj = new myNumberType(4);
myObj + 3; // 7

规范

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
Object.prototype.valueOf
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Object.prototype.valueOf
Standard  
ECMAScript Latest Draft (ECMA-262)
Object.prototype.valueOf
Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

更多参考

文档标签和贡献者

标签: 
 此页面的贡献者: zilong-thu, jimwmg, Ende93, helloguangxue, paddingme, teoli, ziyunfei
 最后编辑者: zilong-thu,