代码之家  ›  专栏  ›  技术社区  ›  Alexander Mills

获取变量名而不是值

  •  -1
  • Alexander Mills  · 技术社区  · 6 年前

    使用bash,我认为这是可能的,但不确定JavaScript,假设我们有:

        const {masterid} = req.query;
    
        if (!masterid) {
            return res.status(500).send(new Error('Missing query param "masterid".'));
        }
    

    我想做的是 不是硬编码 字符串中的“masterid”,改为执行以下操作:

        const {masterid} = req.query;
    
        if (!masterid) {
            return res.status(500).send(new Error(`Missing query param "${Reflect(masterid).name()}.".`));
        }
    

    有没有一种方法可以通过Reflect API来实现这一点?

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect

    2 回复  |  直到 6 年前
        1
  •  3
  •   Without Haste    6 年前

    this other post

    var masterid = 2;
    var text = Object.keys({masterid})[0]; //equals "masterid"
    
        2
  •  1
  •   Estus Flask    6 年前

    这可能用于测试/调试目的,但不适用于生产。唯一的方法是以某种方式篡改它,例如解析、修改和评估。例如, rewire 使用 eval

    由于这些JavaScript限制,一个合适的方法是不依赖变量。处理属性名不会有问题。断言在节点中很常见,这种情况下可以使用helper函数:

    assertParam(obj, param) {
      assert.ok(obj[param], `Missing param "${param}".`);
    }
    
    ...
    
    try {
      assertParam(req.query, 'masterid');
    } catch (err) {
      return res.status(500).send(err);
    }
    
    推荐文章