没有评估是否可以实现?

时间:2014-11-18 11:49:56

标签: javascript javascript-objects

我有这个代码,有效:

function getSomeValue(property) {
    var obj = {
        lvl1: {
            lvl2: {
                lvl3: 'hi'
            }
        }
    };
    //Is it ok to use eval?
    return eval('obj.' + property);
}

//I would like to return the value of obj.lvl1.lvl2.lvl3 
getSomeValue("lvl1.lvl2.lvl3");

这是我第一次觉得需要使用eval。是eval邪恶吗?还有另一种快速实现这一目标的方法吗?

2 个答案:

答案 0 :(得分:4)

您不必使用eval,例如:



    function getSomeValue(property) {
      var obj = {
          lvl1: {
            lvl2: {
              lvl3: 'hi'
            }
          }
        },
        arr = property.split('.');

      return arr.reduce(function(a, b) {
        return a[b];
      }, obj);
    }

    document.write(getSomeValue("lvl1.lvl2.lvl3"));




答案 1 :(得分:1)

我个人认为这很好,因为你限制eval d obj中的内容。

当您运行从远程服务器或其他外部脚本上的AJAX调用派生的代码时,eval的使用很糟糕。此外,此处window对象没有变化或操纵,因此我没有看到问题。

假设您将代码作为字符串传递,您必须质疑是否需要这样做以及它为您的应用程序提供的价值。但我想,如果你愿意,为什么不呢。