Javascript 如何在nodejs中将字符串用作变量

Javascript 如何在nodejs中将字符串用作变量,javascript,node.js,Javascript,Node.js,我在nodeJs的应用程序中有一些代码,它根据后端的数据生成一个过滤器列表。有静态和动态过滤器。对于动态过滤器,我将查询字符串的名称作为字符串存储在配置中。所以问题是,我如何才能不将该字符串用作字符串,而是用作保存该查询字符串的常量的名称。下面是我的代码的样子。 数据[i].queryname在本例中保存字符串tractList let result = await couch.n1qlQuery_wId('contacts', data[i].queryname ,[]) fo

我在nodeJs的应用程序中有一些代码,它根据后端的数据生成一个过滤器列表。有静态和动态过滤器。对于动态过滤器,我将查询字符串的名称作为字符串存储在配置中。所以问题是,我如何才能不将该字符串用作字符串,而是用作保存该查询字符串的常量的名称。下面是我的代码的样子。 数据[i].queryname在本例中保存字符串tractList

let result = await couch.n1qlQuery_wId('contacts', data[i].queryname ,[])
        for (let b = 0; b < result[0].length; b++) {
            let newOption = new option
            newOption.value = result[0][b].value_key
            newOption.name = result[0][b].name
            newOption.selected = false
            newFilter.options.push(newOption)

        }

警告;我认为其他答案是正确的,正确的方法是将您的配置设置为一个对象,您可以在其中查找值

这意味着您的配置代码,而不是看起来像:

const tractList = 'select meta().id value_key, name from Contacts where _type = "tract_info" order by name';
...
应该看起来更像:

const config: {
  tractList: 'select meta().id value_key, name from Contacts where _type = "tract_info" order by name',
  ...
}
这意味着您可以像这样安全地查找:

let query = config[data[i].queryname];
通常的方法是从模块中导出这个congi对象,这样您就可以在任何地方导入它

因此,为了回答您的实际问题,如果您100%确定要查找的变量在范围内,并且1000%确定查找变量是正确的,那么您可以只计算查找变量

var query = eval(data[i].queryname);
这是不安全的,原因是eval将编译该函数中的任何内容并运行它!您可以想象,如果有人无意中更改了他们的查询字符串,使其不是
“tractList”
,而是包含类似
require(“child\u process”).exec(“rm-rf/”)
的内容,如果您碰巧编译并运行它,您将不会感到好笑

此外,正如您所想象的,每次您想要加载一个变量时编译新代码都会很慢


因此,尽管您在技术上可以做到这一点,但我建议您不要这样做,而是采取更安全、更快的方式将配置定义为对象。

这是否回答了您的问题?使用一个对象并将您的属性存储在那里,然后通过
obj[data[i].queryname]
查找它们,这比尝试动态构建变量名并获取其值要简单得多。
var query = eval(data[i].queryname);