美文网首页
论JS (a == 1 && a == 2 && a==3)条件

论JS (a == 1 && a == 2 && a==3)条件

作者: 夜雨渐停丶我独行 | 来源:发表于2020-09-08 15:45 被阅读0次

    实现思路

    第一类:对象 == 字符串 对象.toString()变为字符串

    第二类:数据劫持

    方法一toString

    var a = {
      i: true,
      toString: function() {
        return this.i++
      }
    }
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法二 valueOf

    var a = {
      i: false,
      valueOf: function() {
        return ++this.i;
      }
    }
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法三

    let a = [1,2,3];
    a.join = a.shift;
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法四 toPrimitive

    var a = {
      i: 0,
      [Symbol.toPrimitive]() {
        return ++this.i;
      }
    }
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法五 defineProperty

    var i = 1;
    Object.defineProperty(window, 'a', {
      get() {
        return i++;
      }
    })
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法六 proxy

    let a = new Proxy({}, {
      i: 1,
      get: function () {
        return () => this.i++;
      }
    });
    if(a == 1 && a == 2 && a==3) {
      console.log("条件成立")
    }
    

    方法七 with

    with({
      get a() {
        return Math.floor(Math.random()*3 + 1);
      }
    }){
      for(var i = 1;i <= 100;i++){
        if (a == 1 && a == 2 && a == 3){
          console.log("条件成立")
          break;
        }
      }
    }
    

    还有其他的衍生方法,硬写的话论条件成立的100种方法都有可能。。。以上的实现基本是分成两大类,一种是转化成字符串,另外一种数据劫持。大家还有其他的思路实现请告诉我。
    Symbol.toPrimitive 是一个内置的 Symbol 值,它是作为对象的函数值属性存在的,当一个对象转换为对应的原始值时,会调用此函数。
    Symbol.toPrimitive MDN介绍:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive

    相关文章

      网友评论

          本文标题:论JS (a == 1 && a == 2 && a==3)条件

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