美文网首页
Can (a == 1 && a == 2 && a == 3)

Can (a == 1 && a == 2 && a == 3)

作者: nomooo | 来源:发表于2019-12-25 16:31 被阅读0次

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

    如果变量 a 是一个基本 Number 类型,这是不可能为 true 的,因此解题思路也需要从变量 a 的类型及(对象)转换(基本类型)上来考虑。

    方案一:

            const a = {
                value: 1,
                toString: () => {
                    return a.value++
                }
            }
            console.log(a == 1 && a == 2 && a == 3) // true
    

    将 a 定义为一个对象,并重写了其 toString 方法。因此在每次进行判断时,按照规则,== 号两边出现了对象类型,另一边是 Number 类型,需要调用 a 对象 toString 方法,toString 方法的返回值会作为对象转为基本类型的值,我们每次将 value 属性加 1。同样,如果按照相同的方式重写 valueOf 方法,也是可以达到同样目的的

    方案二:

            let value = 0;
            Object.defineProperty(window, 'a', {
                get: () => {
                    return ++value
                }
            })
            console.log(a == 1 && a == 2 && a == 3) // true
    

    将 a 作为属性,挂载在 window 对象当中,重写其 getter 方法。

    相关文章

      网友评论

          本文标题:Can (a == 1 && a == 2 && a == 3)

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