美文网首页前端100问
【前端100问】Q38:下面代码中 a 在什么情况下会打印 1?

【前端100问】Q38:下面代码中 a 在什么情况下会打印 1?

作者: alanwhy | 来源:发表于2021-01-03 10:47 被阅读0次

    写在前面

    此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
    为了备战 2021 春招
    每天一题,督促自己
    从多方面多角度总结答案,丰富知识
    下面代码中 a 在什么情况下会打印 1?
    简书整合地址:前端 100 问

    正文回答

    因为==会进行隐式类型转换 所以我们重写 toString 方法就可以了

    引用类型在比较运算符时候,隐式转换会调用本类型 toStringvalueOf 方法

    var a = {
      i: 1,
      toString() {
        return a.i++;
      },
    };
    
    if (a == 1 && a == 2 && a == 3) {
      console.log(1);
    }
    
    // or
    var a = { num: 0 };
    a.valueOf = function () {
      return ++a.num;
    };
    if (a == 1 && a == 2 && a == 3) {
      console.log(1);
    }
    
    // or
    var a = [1, 2, 3];
    a.join = a.shift;
    if (a == 1 && a == 2 && a == 3) {
      console.log("1");
    }
    
    // or ES6的symbol
    let a = { [Symbol.toPrimitive]: ((i) => () => ++i)(0) };
    if (a == 1 && a == 2 && a == 3) {
      console.log("1");
    }
    

    相关文章

      网友评论

        本文标题:【前端100问】Q38:下面代码中 a 在什么情况下会打印 1?

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