javascript - 如何用 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
毫无问题地做。
有任何想法吗?
解决方案
如您所知,您不能在变量名中使用连字符,但可能有一种潜在的解决方法是替换键(例如,我将连字符替换为下划线)并在全局范围内使用 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']);
推荐阅读
- nuxt.js - 让 Nuxt.js 从 markdown frontmatter 生成路由
- ios - 在 Alamofire 中处理超时
- azure - 在 Azure 中使用“公开 API”是否需要付费?
- python-3.x - 在python中调用UDP协议的发送函数时处理套接字错误
- django - 使用 get_object 返回对象并检索 UpdateAPIView
- azure-data-factory - 是否有任何 Terraform 代码或 ARM 模板代码可用于在数据工厂中启用诊断设置
- css - 使用 @use 关键字自定义 Bootstrap 5
- javascript - 如何在 kony 可视化工具中实现动态面包屑
- apache-kafka - 关于多个 Spark 流作业消耗一个具有相同组 id 的 kafka 主题的问题
- python - 散点图:更改间隔长度