作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要评估一个字符串,例如 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
。
有什么想法吗?
最佳答案
如您所知,您不能在变量名中使用连字符,但可能有一个潜在的解决方法是替换键(例如,我将连字符替换为下划线)并在全局范围内使用 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']);
关于javascript - 如何用连字符定义 javascript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51852397/
我是一名优秀的程序员,十分优秀!