a==1&&a==2&&a==3为true的情况

第一种:

   const a={
      i:1,
      toString:function(){
        return a.i++;
      }
    }
    if(a==1&&a==2&&a==3){console.log("ok")}else{console.log("no")}

第二种:

    var val=0;
    Object.defineProperty(window,'a',{
      get:function(){
        return ++val;
      }
    })
    if(a==1&&a==2&&a==3){console.log("ok")}else{console.log("no")}

 

解释

第一种:利用松散相等运算符的工作原理

1.严格运算符(===):

1)两个操作数1类型不同,返回false

2)操作数存在NaN,返回false

3)二者都为null或都为undefined,返回true;一个为NaN,一个为undefined,返回false

4)操作数都为true或都为false,返回true

5)操作数都为数字,且值相等,返回true(-0===0,返回true)

6)都为字符串,且字符相等,返回true

7)两个引用指向同一个对象、函数或数组时,返回true

2.松散运算符(==):

1)一个是null,一个是undefined,返回true

2)一个值是字符串,一个是数字,将字符串装换为数字,再比较

3)其中一个操作数为true或false,先转换为1或0再比较(true:1,false:0)

4)如果一个值为对象,另一个为数字或字符串,会将对象转换为1原始值(valueof函数)

5)其他不同类型的值都不相等

 

第二种:劫持JS对象的getter,这种情况下(===)也适用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值