zoukankan      html  css  js  c++  java
  • 在JavaScript里 (a ==1 && a== 2 && a==3) 有可能是 true 吗?

    ps:今天看到这个有趣的问题,跟大家分享下

    一个有趣的问题:

    在 JavaScript 中, (a ==1 && a== 2 && a==3) 是否有可能为 true ?

    这个问题是一个小伙伴在面试时被问到,我想了很久。测试了下,然后偷偷去看了个答案,原来还不止一种方式为 true。

    大家是否觉得有趣呢?有趣就往下看咯。

    解法一:

    利用松散相等运算符 == 的工作原理,你可以简单地创建一个带有自定义toString( 或者 valueOf)函数的对象,在每一次使用它时候改变它所的返回值,使其满足所有三个条件。

    const a = {
      i: 1,
      toString: function () {
        return a.i++;
      }
    }
    if(a == 1 && a == 2 && a == 3) {
      console.log('Hello World!');
    }
    View Code

    解法二:

    用下划线方式进行定义变量a,这也是我能想到的一种方式。解法一时通过看小伙伴答案找到的。

    var a_ = 1;
    var a = 2;
    var _a = 3;
    if(a_==1 && a== 2 &&_a==3) {
        console.log("Why hello there!")
    }
    View Code

    接下来可能还有更多解法,期待你的回答更加精彩,让人拍案叫绝。也让我学习学习。

    总结

    1. 利用松散相等运算符 == 的原理,自定义 toString 和 valueOf 返回对应值

    2. 利用半宽度韩文下划线等特殊字符,玩“障眼法”,本质上其实并没有做到题设

    最后,打个广告吧,就是有个关于web的q群:557529704,大家有兴趣可以加入一起学习。

  • 相关阅读:
    迭代器在LinkedList上的删除
    java多线程:CopyOnWriteArrayList
    vs中代码编译通过,但还是有红色波浪线
    vs中项目属性配置
    TortoiseGit安装与配置
    DC(device context)
    weak_ptr 使用
    C++ 中shared_ptr循环引用计数问题
    for_each与lambda表达式联合使用
    new 和 make_shared 在内存上的区别
  • 原文地址:https://www.cnblogs.com/zwp06/p/8360036.html
Copyright © 2011-2022 走看看