一般要重写 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,所以直接不相等,根本不需要再去求值了。