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() 优先。
