用白话讲解:如何实现a==1 && a==2 && a==3 为true

       前两天遇到了这个有意思的面试题,真的是想破脑袋也没有想明白“a怎么可能同时等于三个数呢”?
       最后看了答案才恍然大悟。虽然那个答案讲的比较抽象,但是今天我就用自己的话来简单给大家讲解一下这道题的一个解法:

在讲解这道题之前,我们首先得了解一下JS的语法规(天)范(坑),那就是:

  • 如果两个值类型相同,则直接比较(双等号比较)
  • 如果两个值不是同一个类型的话,则按照对象→字符串→数字(布尔值→数字)进行相应类型转换,直到两个值的类型相同再进行比较。

说白了就是JS的隐性转换!

废话不多说,直接上图:
在这里插入图片描述
我们做两个实验来验证一下:

  1. 对象和布尔值比较
[] == true;  //false  

数组属于对象,在遇到双等号后隐性转换为了空字符串

  1. 对象和字符串比较
[1,2,3] == '1,2,3' // true

这里数组中的三个数组隐性转换为了字符串的’123’,因此相等!


OK!明白了上面这些JS的知(天)识(坑),那么这道题就迎刃而解了!

我们先来看看答案是什么:

//实现a==1 && a==2 && a==3 为true
var a = {
    i : 1,
    toString(){
        return a.i++
    }
}
console.log(a==1 && a==2 && a==3 ) //true

【思路】:

  1. a变成对象

  2. 对象遇到双等号 ------> 隐式转换(会调用对象身上toString方法)

    -------> 由于“++”在i之后,则先返回i值再进行++运算 -------> 即可为true

如此一来,a==1 && a==2 && a==3就可以为true了!!

其实这道题的考点就是考察对JS隐性转换的理解,仔细思考一下,其实也不是很难哦~~~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值