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

    第一种解法:

    const a = {
      i: 0,
      toString: function() {
        return a.i++
      }
    }

    if (a == 1 && a == 2 && a == 3) {
      console.log('成功')
    }

    // 之所以成功,因为使用了松散相等的运算符,使用松散相等时,如果其中一个操作数与另一个类型不同,则 JS 引擎将尝试将一个操作转换为另一个类型。
    // 在左边对象、右边的数字的情况下,它会尝试将对象转换为一个数,首先通过调用 valueOf 如果是可调用的。否则,它会调用toString方法。

    第二种解法:

    const a_ = 1;
    const a = 2;
    const _a = 3;
    if (a_ == 1 && a == 2 && _a == 3) {
      console.log('成功')
    }
    // 有三个不同的变量来声明,本质上没有做到题设(不推荐)

    第三种解法:

    let val = 0;
    Object.defineProperty(window, 'a', {
      get: function() {
        return ++val
      }
    })


    if (a == 1 && a == 2 && a == 3) {
      console.log('成功')
    }

    // 使用 get, 让 a 返回三个不同的值,在真正的代码逻辑中不推荐使用

  • 相关阅读:
    UVa-272-TEX Quotes
    UVa-10881-蚂蚁
    UVa-1339-古老的密码
    POJ-1328-放置雷达
    POJ-3190-分配畜栏
    Openjudge-2787-算24
    WHYZOJ-#47. 滑行的窗口(单调队列)
    2017年9月16日18:03:54
    WHYZOJ-#93. 暗黑破坏神(垃圾01背包)
    WHYZOJ-#95 大逃亡(二分+BFS)(好题!!!)
  • 原文地址:https://www.cnblogs.com/suntao666/p/8425661.html
Copyright © 2011-2022 走看看