zoukankan      html  css  js  c++  java
  • 如何使a == 1 && a== 2 && a == 3?

    在网上看到一道有意思的面试题,问何种情况下a == 1 && a== 2 && a == 3,看起来不可思议,实则还是有门路可循的。
    比如很明显此题使用了 == 而不是 === 全等,这就给我们开放了解题的入口,我们发散一下思维,也就是相等号左右两边值相等,类型可以不一样。
    第一种思路:
           稍作变形也就是'1' == 1 && '2' == 2 && '3' == 3。
    第二种思路:
           不作变形也就是1 == 1 && 2 == 2 && 3 == 3。
    接着,我们可以考虑真正的问题,那什么时候一个变量可以“同时"等于不同的值呢。这个“同时“其实也不是真正意义上的‘同时’,这个语句其实是一个顺序执行的过程,也就是第一次等于1,第二次等于2,第三次等于3。这个a也就是一个普通原始数据,原始数据本身似乎没有什么特殊属性,那我们可以联想到Javascript的valueOf方法,平时都是对象自己调用的,我们是否可以在这上面做文章呢?答案是肯定的,我们可以自定义相关方法覆盖原方法。
    1 var a = {
    2    value: [3, 2, 1],
    3    valueOf: function () {
    4       return this.value.pop()
    5    } 
    6 }
    7 console.log(a == 1 && a== 2 && a == 3) // true
    这样就完成了,是不是很简单呢?
    当然这个方法有一定的局限性,比如第一次返回tue,后面执行就变成false了,大家有更好的方法建议可以提出来一起讨论哦
     
  • 相关阅读:
    C++二叉树
    C++、、
    C++符号优先级
    django 时间格式(全局修改,不用过滤器)
    华硕ASUS U5800GE驱动
    pycharm 代码跟进以跳回/返回
    linux多jdk切换环境
    celery timeout的拦截
    chrome开启headless模式以及代理
    python 单引号与双引号的转义
  • 原文地址:https://www.cnblogs.com/july-Vivian/p/15409829.html
Copyright © 2011-2022 走看看