JavaScript Object.prototype.valueOf() 方法

Object.prototype.valueOf() 语法

valueOf() 是 JavaScript Object 对象实例的一个方法,它用于返回指定对象的原始值。

语法:

obj.valueOf()

说明:

JavaScript 所有内置对象(如 Object、String、Array、Number、Boolean 等)都有 valueOf() 方法,它们会返回该对象的原始值。对于其他内置对象的 valueOf() 方法,另请参阅:

此外,小伙伴们还要清楚以下几点。

  • 对于普通对象,valueOf() 默认返回的是它的本身。
  • 原始值(字符串、数字、布尔值等)本身没有 valueOf() 方法。但当它们被包装成对象时,其包装对象会调用各自的 valueOf() 方法。

Object.prototype.valueOf() 摘要

属于 JavaScript Object 对象
使用频率
官方文档 查看
MDN 查看

Object.prototype.valueOf() 示例

接下来,我们通过几个简单的例子来讲解一下 valueOf() 方法是如何使用的。

示例 1:普通对象调用 valueOf()

const obj = {
    name: "Jack",
    age: 20
};

console.log(obj.valueOf());
console.log(obj === obj.valueOf());

运行结果如下。

{ name: 'Jack', age: 20 }
true

分析:

对于普通对象来说,调用 valueOf() 会返回它的本身。

示例 2:内置对象调用 valueOf()

const numObj = new Number(666);
const dateObj = new Date("2025-05-20T10:00:00Z");
const boolObj = new Boolean(true);
const strObj = new String("lvyenet");

console.log(numObj.valueOf());
console.log(dateObj.valueOf());
console.log(boolObj.valueOf());
console.log(strObj.valueOf());

// 在算术运算中隐式调用 valueOf()
console.log(numObj + 100);
console.log(dateObj < new Date("2026-01-01"));

运行结果如下。

666
1747735200000
true
lvyenet
766
true

分析:

许多内置对象重写了 valueOf() ,这样的目的是返回一个有意义的原始值。比如对于 Date 对象来说,调用 valueOf() 会隐式将其转换为时间戳。

valueOf() 与 toString() 的类型转换规则

当 JavaScript 需要将一个对象转换为原始值时,它会优先尝试调用对象的 valueOf() 方法。

  • 如果 valueOf() 返回的不是原始值(或者不存在),它会转而尝试调用 toString() 方法。
  • 如果 toString() 也返回的不是原始值,则会抛出 TypeError 异常。在转换为字符串的语境中,toString() 优先;而在转换为数字的语境中,valueOf() 优先。
给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号