js数据类型隐式转换

var a = {
    value: 2,
    toString: function(){
        return ++this.value;
    }
}
if(a == 3 && a == 4){
    console.log("js is amazing!");
}
js is amazing

原理分析:

  1. 因为a是个对象,对象与原始类型进行比较的时候会将对象转换成原始类型,对象转换成原始类型就是依据valueOftoString的返回值。
  2. 先调用valueOf返回它本身,不是原始类型,因此再调用toString
  3. 第一次判断a==3的时候toString的值为++2也就是3,以此类推第二次判断的是a转换后的值为4,所以if条件成立。

推荐阅读更多精彩内容