代码之家  ›  专栏  ›  技术社区  ›  Mohd Abdul Mujib

JavaScript将字符串转换为运算符

  •  0
  • Mohd Abdul Mujib  · 技术社区  · 4 年前


    比如说

    {obj1} '==' {obj2}
    

    {obj1} == {obj2}
    

    {obj1} '!==' {obj2}
    

    应该是:

    {obj1} !== {obj2}
    

    我可以用 eval() ,但这会强制将要比较的对象转换为字符串,从而导致 === (严格的类型检查)比较无效。

    eval 将给出错误的结果:

    const obj = "5"
    const obj2 = 5
    
    const operator = '===';
    
    eval(`console.log(${obj} ${operator} ${obj2})`) //outputs true, incorrect (obj is of type string, obj2 is of type number)
    
    console.log(obj === obj2) //outputs false, correct


    可能的方法

    差不多

    if(condition === '!=='){
      return before_OrderRequest.Id !== after_OrderRequest.Id
    }else if (condition === '==='){
      return before_OrderRequest.Id === after_OrderRequest.Id
    }
    //...more if statements
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Spectric amamoto    4 年前

    可以将具有运算符字符串表示形式的对象定义为返回执行相应比较的箭头函数的属性。

    const compare = {
      '==': (a, b) => a == b,
      '!=': (a, b) => a != b,
      '===' : (a, b) => a === b,
      '!==' : (a, b) => a !== b
    }
    
    const obj1 = 1;
    const obj2 = 2;
    
    console.log(compare['=='](obj1, obj2))
    console.log(compare['!='](obj1, obj2))
    console.log(compare['==='](obj1, obj2))
    console.log(compare['!=='](obj1, obj2))