使用一个变量命名另一个变量javascript

Using a variable to name another variable javascript

在使用 node.js 和 discord.js 制作 discord 机器人的过程中,我想创建一个新变量,在本例中是一个对象 属性(字符串 "server" 和某个值的字符串。)为了命名新变量,我想使用我在此处引用的服务器的服务器 ID,它存储在另一个变量中。我有什么方法可以做到这一点?

到目前为止我已经试过了 eval("var " + serverID + " = {'server': 'test'}"),这给了我一个语法错误:第二个加号上的 invalid/unexpected 标记(用字符串替换对象仍然给了我同样的错误)。我看过的所有地方都没有帮助解释 eval 函数有什么问题,我很困惑如何以另一种方式做到这一点。

万一您想到的第一件事是重构我使用变量的方式和我正在使用的类型,无论这个输出是什么,都必须让我向这个变量添加更多信息,至少在我的思想限制我使用对象和添加属性。我还在稍后的代码中将此变量存储到 JSON 文件中,这也限制了我使用数组或对象。

没有充分的理由将一个变量存储为另一个变量的名称。正如您所提到的,完成您想要的最简单方法是将 serverID 存储在对象中。

您的语法是正确的,但您可能希望确保您的服务器 ID 是合法的 JavaScript 标识符。

var serverID = "asddkjkisdf";
eval("var " + serverID + " = {'server': 'test'}")

console.log(asddkjkisdf);

不过,我建议创建一个数据结构,例如对象数组来存储此信息。在那种情况下,您不必担心服务器 ID 的值。例如

[{id: 'asdfasdf', server: 'test'}, ... ]

我猜 eval 失败是因为你的 serverID 是一个数字(或代表数字的字符串),所以语句看起来像 var 123 = {'server': 'test'},这会给出语法错误。

无论如何,一个简单的替代方法是在对象而不是变量上创建 属性。类似于:

var myVariables = {};
//...
myVariables[serverID] = {'server': 'test'};

您甚至可以将它添加到 global 对象中,如果它对您的情况有意义并且您确实需要一个全局变量。