32

可能重复:
Javascript 使用变量作为对象名称

如何让 JS 将字符串视为对先前定义的对象的引用?简化:

var myObject = new MyObject();

var myString = "myObject";

var wantThisToWork = myString.myproperty;
4

4 回答 4

44

如果变量在全局范围内,您可以将其作为全局对象的属性访问

var a = "hello world";
var varName = "a";
console.log( window[varName] ); // outputs hello world
console.log( this[varName] ); // also works (this === window) in this case

但是,如果它是一个局部变量,唯一的方法是使用eval( disclaimer )

function () {
  var a = "hello world";
  var varName = "a";
  console.log( this[varName] ); // won't work
  console.log( eval(varName) ); // Does work
}

除非您可以将动态变量放入对象中并像访问属性一样访问它

function () {
  var scope = {
    a: "hello world";
  };
  var varName = "a";
  console.log( scope[varName] ); // works
}
于 2012-06-08T17:27:32.697 回答
8

您可以使用该eval功能。

eval(myString).myproperty

但是,请谨慎使用 eval,如果这是用户输入的内容,它将执行任何 javascript 代码!

于 2012-06-08T17:23:51.303 回答
7

在我看来,唯一的方法是使用 eval。但正如他们所说, eval 是邪恶的——但不是在受控环境中。这是可能的方式,但我不建议使用 eval,除非绝对必要。

var myObject = new MyObject();
var myString = "myObject";
var wantThisToWork = eval(myString).myproperty;
于 2012-06-08T17:22:46.543 回答
4

使用eval()

var myObject = {};
myObject.myproperty = "Hello";
var myString = "myObject";

var wantThisToWork = eval(myString).myproperty;
于 2012-06-08T17:30:16.563 回答