如何在Node.js中将一个字符串转换为变量名?

6
//Admin.js

var insertAdminFeed = function(s, id, timestamp){
    var admin_att_new_key = '12345';
    var admin_att_new_key2 = 'abc';
    var admin_att_new_key3 = 'zyzyz';

    var s = 'admin_att_new_key';
    console.log(global[s]); //should print '12345'
};
exports.insertAdminFeed = insertAdminFeed;

我想在node.js中将一个字符串转换为变量(我有很多键,不想为每个键编写if / else语句)如何做到这一点?

为什么不使用对象呢? - zerkms
你做不到。这在ES6中将会非常好地实现(使用符号),但在ES5中,除非你使用解析器,否则无法从变量本身访问变量名。你也不能迭代所有闭包变量。你应该做的是可能是 var admin= {key:'12345',key2:'abc',key3:'zyzyzy'} 然后在需要时使用Object.keys(admin)来迭代这些键。 - Benjamin Gruenbaum
4
在 Node.js 中,模块并不像浏览器中的 JavaScript 那样在全局范围内运行,变量 var 的作用域也限定在函数中。而且,admin_att_new_key{,2,3} 看起来更像是一个数组的开头。 - Jonathan Lonowski
1个回答

10

在JavaScript中实现这个并不是真正可能的。

通常会使用对象字面量来实现类似的需求。

var key = 'foo';
obj[key] = 1;
obj['foo'];

严格来讲,在JS中使用eval是技术上可行的。但是,真的不要这么做。

eval("var "+ name + " = 'some value';");
eval("console.log("+ name  +")");

我同意这是一个不好的想法,但是 eval(s)(假设s与问题中定义的相同)可以正常工作 - 没有必要在eval中再声明这个变量。 - Aaron Dufour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接