使用字符串访问变量

时间:2010-04-15 10:17:39

标签: javascript

我目前有一个Javascript函数,它使用字符串来引用对象名称并访问其属性。我目前正在使用eval()来获得所需的效果,我知道这是非常非常错误的。这是我目前如何实现我想要的一个例子:

var stringToObjectRef = function() {

    var myTestVar = "myTestObject";
    var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };

    var myValue = eval(myTestVar + '.item1');

    alert(myValue);

}();

我尝试过像[myTestVar] .item1这样的东西,但这会返回undefined。实现此目的的正确语法是什么?

提前致谢。

3 个答案:

答案 0 :(得分:7)

如果您正在谈论item1部分,那么您正在寻找:

myValue = myTestObject["item1"];

无需eval。 (几乎从来没有。)

如果您正在讨论使用“myTestObject”字符串获取myTestObject变量,那么您希望重构代码,这样就不会使用eval。遗憾的是,函数中用于符号解析的变量对象无法直接访问。重构可以明确地使用一个对象:

var stringToObjectRef = function() {

    var objects = {};

    var myTestVar = "myTestObject";
    objects.myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };

    var myValue = objects[myTestVar].item1;

    alert(myValue);

}();

偏离主题,我不记得原因,但如果您要立即执行该匿名函数,则需要将函数表达式放在括号中:

var x = (function() { return 5; })();

而不是

var x = function() { return 5; }();

同样,我不记得为什么,以及是否是因为流行的解释器中的实现错误或语法的实际要求。

答案 1 :(得分:0)

请改为尝试:

var stringToObjectRef = function() {
  var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };
  var myValue = myTestObject['item1'];
  alert(myValue);
}();

答案 2 :(得分:0)

eval(“myTestObject [\”item1 \“”)应该这样做,如 myTestObject.item1是myTestObject [“item1”]

的简写

How do I reference an object dynamically?