美文网首页Java web
(a== 1 && a ==2 && a==3)可能为true吗

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

作者: 景元合 | 来源:发表于2020-03-11 18:59 被阅读0次

前言

今天在网上看到一道有趣的题,问(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。

相关文章

网友评论

    本文标题:(a== 1 && a ==2 && a==3)可能为true吗

    本文链接:https://www.haomeiwen.com/subject/huuhjhtx.html