Javascript - 在没有eval()的情况下分配动态值

时间:2011-03-04 21:52:32

标签: javascript json eval

所以,我传入了3个变量:

  1. 统计信息(JSON对象,如下所示)
  2. place_type (字符串,“美国”或“州”)
  3. factor (字符串)
  4. 我有另一个变量 answer ,其值取决于其他变量。例如,如果place_type =“State”和factor =“factor2”,那么

    var answer = stats.State.factor2; // equals "E"
    

    我正在尝试查看是否有一种方法可以动态分配变量,而不需要使用eval()。

    // Simplified, there are many more than 3 factors
    var stats = {
        "US": {
            "factor1" : "A",
            "factor2" : "B",
            "factor3" : "C"
        },
        "State": {
            "factor1" : "D",
            "factor2" : "E",
            "factor3" : "F"
        }
    }
    

    使用eval(),这就是它的完成方式:

    eval("var answer = stats." + place_type + "." + factor + ";");
    

    这可能在JS中不需要eval()或大量不同的IF循环吗?提前谢谢。

3 个答案:

答案 0 :(得分:4)

你走了:

var answer = stats[place_type][factor];

现场演示: http://jsfiddle.net/simevidas/NsT8Y/


考虑将它放在try-catch块中,因为链接属性访问器。如果place_type中不存在stats属性,则stats[place_type]将返回undefinedundefined[factor]将引发错误。

var answer;

try { 
    answer = stats[place_type][factor];
} catch(e) {}

答案 1 :(得分:2)

对于这个例子,这很容易。

的等效语法
var answer = stats.State.factor2;

var answer = stats["State"]["factor2"];

后一种语法适用于变量:

var answer = stats[place_type][factor];

答案 2 :(得分:1)

var answer = stats[place_type][factor];