首页 > 解决方案 > 如何用 hiphen 定义 javascript 变量?

问题描述

我需要评估一个字符串,例如employee-count = 3我有一个带有可以引用的潜在变量的对象。当变量名有效时我没有问题,但是employee-count我有点难过。

这是我的普通变量名示例:

function evalWithObject(expression, object) {
  _.each(object, (value, key) => {
    eval(`var ${key} = value`);
  });

  return eval(expression.replace('=', '==='));
}

有什么方法可以在当前范围内使用对象表示法定义变量?例如,我可以object['employee-count'] = true毫无问题地做。

有任何想法吗?

标签: javascriptvariables

解决方案


如您所知,您不能在变量名中使用连字符,但可能有一种潜在的解决方法是替换键(例如,我将连字符替换为下划线)并在全局范围内使用 eval。

// if you want to create variable in global space, indirect eval call
var geval = window.execScript || eval; 
function evalWithObject(expression, object) {
  for (var key in object) {
    if (object.hasOwnProperty(key)) {        
        value = object[key];
        key = key.replace('-', '_');        
        geval('var ' + key + ' = ' + value);
        // OR
        // eval.call(null, 'var ' + key + ' = ' + value)
    }
  }
  return geval(expression.replace('=', '==='));
  // OR
  // return eval.call(null, expression.replace('=', '==='));
}

// you need to control your expession though, replace key employee-count to employee_count 
evalWithObject("employee_count = 5 ? console.log('Yes')  : console.log('No') " , {"employee-count": 5});

// log variable
console.log(window['employee_count']);

推荐阅读