首页 > 解决方案 > 您可以使用变量名来引用对象而不使用 eval()

问题描述

所以,

我知道可以在对象上创建动态键。

const foo = 'bar';
const obj = {
    [foo]: 'this is bar',
};

但是是否可以通过变量值引用对象。例如,如果我们有 3 个对象:

const obj1 = {}
const obj2 = {}
const obj3 = {}

还有一个包含他们名字的数组

const objects = ['obj1', 'obj2', 'obj3'];

我们可以遍历这些名称并引用它们的对象吗?这不起作用:

objects.forEach(obj => Object.assign(obj, { extended: true }));

但这将:

objects.forEach(obj => Object.assign(eval(obj), { extended: true }));

但是 Mozilla 的文档声明“永远不要使用 eval!

标签: javascriptjavascript-objectsevaldynamic-variables

解决方案


答案是你不能。

eval在 JS 中,除非您(或非常相似的Function构造函数),否则无法动态访问或创建变量。

尽管在全局范围内创建的变量 withvar将成为全局对象的属性,并且您可以在其上访问它们,但也不推荐这样做(由于 arisig with 的问题var,使用保留名称等),并且仅在全局范围内有效范围(这更糟)。

您可以做的最好的事情是将这些变量放入一个对象中,这样您就可以动态地访问它们。JS 变量对此并不好。


推荐阅读