一般要重写 valueOf 和 toString

//toString  valueOf
const a = {
current: 1,
toString() {
return this.current++
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('a')
}

应为 == 有隐试转换


alert( a ) //50 执行了toString() 执行了valueOf() alert( +a ) //30 执行了toString() alert( a>40 ) //false 执行了toString() alert( a==30 ) //true 执行了toString() alert( a===30 ) //false //最后这个未输出任何字符串,个人猜想是这样的:全等比较时,js解析器直接先判断类型是否一样,明显一个是Object,一个是Number,所以直接不相等,根本不需要再去求值了。