使用变量动态访问对象

时间:2017-03-19 19:38:47

标签: javascript variables

我尝试使用动态名称访问对象。这可能吗?

const something = { bar: "Foobar!" };
const objectName = 'something';
const propertyName = 'bar';

[objectName][propertyName]; // The idea is to access something.bar, getting "Foobar!"

编辑:我试图使用变量来访问对象本身,而不是它的属性

3 个答案:

答案 0 :(得分:1)

这是一种deceptively simple方式:

eval(objectName)[propertyName];

...如果您无法完全控制存储在objectName变量中的内容,那么这显然是一个非常糟糕的想法(否则就是一个坏主意,因为{{1}例如,您的拼写检查IDE魔法不会优化和控制代码。

更好的想法是将您的eval(以及您想要查询的任何其他名称)转换为对象本身的属性。例如:

something

...稍后使用bracket notation访问它:

const state = {
  something: {
    foo: 'Foobar'
  }
};

答案 1 :(得分:0)

您在浏览器中声明的所有变量都是window对象的属性,因此您可以实际使用它。

var something = { bar: 'Foobar!' };
var objectName = 'something';
var propertyName = 'bar';

window[objectName][propertyName];

但这只适用于使用var声明变量时。它不适用于letconst

答案 2 :(得分:-1)

使用此脚本

    var something = { bar: "Foobar!" };
    var objectName = 'something';
    var propertyName = 'bar';

    console.log(eval(objectName)[propertyName]);
相关问题