var a = {
value: 2,
toString: function(){
return ++this.value;
}
}
if(a == 3 && a == 4){
console.log("js is amazing!");
}
原理分析:
- 因为a是个对象,对象与原始类型进行比较的时候会将对象转换成原始类型,对象转换成原始类型就是依据
valueOf
和toString
的返回值。 - 先调用
valueOf
返回它本身,不是原始类型,因此再调用toString
。 - 第一次判断a==3的时候
toString
的值为++2也就是3,以此类推第二次判断的是a转换后的值为4,所以if条件成立。