0
点赞
收藏
分享

微信扫一扫

(a== 1 && a ==2 && a==3)可能为true吗?

Brose 2021-09-21 阅读 63
jsJava web

前言

今天在网上看到一道有趣的题,问(a== 1 && a ==2 && a==3)可能为true吗?研究了一下竟然发现是可以的。

valueOf和toString

  • 首先大家都知道使用==会进行数据类型转换,例如1==‘1’,同时对象也是可以进行转换的,看代码:
let a={}
console.log(a.valueOf());
console.log(a.toString());
console.log(a=='[object Object]')
//{}
//[object Object]
//true

可以看到当使用==时候调用了对象的toString()方法。

  • 实现
    因此可以借助这个方法实现(a== 1 && a ==2 && a==3)=true
let a={
    i:1,
    toString(){
        return a.i++
    }
}
console.log(a==1&&a==2&&a==3)
//true
  • 说明
    执行a==1时候首先会调用valueOf判断类型是否一致,不一致的话再调用toString(),此时返回a.i并同时++就可以以此类推,最后a.i==4。
举报

相关推荐

0 条评论