📜  Javascript对象valueOf()(1)

📅  最后修改于: 2023-12-03 15:31:48.248000             🧑  作者: Mango

Javascript对象valueOf()

在Javascript中,每个对象都有一个 valueOf() 方法,这个方法用来返回当前对象的基本值(即:primitive value)。如果你将一个对象强制类型转换为原始类型(例如 字符串、数字、布尔值),Javascript 就会调用这个方法。如果你没有为一个特定的对象定义 valueOf() 方法,那么将会默认使用对象的 toString() 方法,因为toString() 也可以返回基本值。

let obj = {
  name: "John",
  age: 30,
  toString() {
    return `${this.name} is ${this.age} years old`;
  },
  valueOf() {
    return this.age;
  }
};
console.log(obj + 10); //40
console.log(String(obj)); //John is 30 years old
console.log(Number(obj)); //30
console.log(Boolean(obj)); //true

在上面的示例中,我们定义了一个对象,其中包含名称和年龄属性,以及 toString() 和 valueOf() 方法。按照上述示例, 我们用 Number, String, 以及 Boolean 三个函数再将对象转成基本值。

valueOf() 的返回值类型应该与当前对象的类型相同。

当 Javascript 需要执行一个操作,它会尝试自动调用这个对象的 valueOf() 方法,如:

  • 在执行数学计算时,JavaScript自动调用 valueOf()方法作为它的参数来转换对象,
  • 在设置某个变量的值为一个对象时,JavaScript自动调用 valueOf() 方法来转换该对象成为一个字符串。

在大多数情况下,valueOf() 方法都是由 JavaScript 自动调用的,并不需要手动调用。

定义valueOf() 方法

因为 valueOf() 方法很少需要手动调用,最好只在以下两种情况下为对象显式定义 valueOf() 方法:

  1. 你已经定义了自己的对象类型,但你希望对象在某些情况下自动转换为原始值
  2. 你想重写 JavaScript 默认的 valueOf() 行为。

代码示例:

let myObject = {
    name: "我的对象",
    value: 10,        
    valueOf: function() { return this.value; }
};
  
console.log(myObject + 5); // 15

在上面的示例中,我们定义了 myObject 对象,并手动为其定义了 valueOf() 方法来返回一个基本值。然后,我们将 myObject 内容转为基本值加5,结果为15。

参考链接