class A {
constructor(value) {
this.value = value;
}
valueOf() {
return this.value;
}
}
class B {
constructor(value) {
this.value = value;
}
valueOf() {
return this.value;
}
}
// 比较代码
const a = new A(5);
const b = new B(5);
console.log(a == b);
类型转换过程解释
- == 操作符规则:当使用
==
操作符比较两个对象时,如果两个操作数都不是基本类型,JavaScript 会尝试通过调用对象的 valueOf
或 toString
方法将其转换为基本类型。
- 自定义
valueOf
方法:在 A
和 B
类中,我们都定义了 valueOf
方法,它会返回实例的 value
属性值。这样在进行 a == b
比较时,JavaScript 调用 a.valueOf()
和 b.valueOf()
方法,将 a
和 b
转换为基本类型(数字 5
)。
- 最终比较:由于两个操作数都被转换为了基本类型数字
5
,此时进行数字之间的比较,5 == 5
返回 true
。