没有价值可以实现吗?

Is it achievable without eval?

本文关键字:实现 有价值      更新时间:2023-09-26

我有这段代码,可以工作:

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 ,例如:

    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"));

我个人认为这很好,因为您将可以eval的内容限制为obj中的内容。

在远程服务器上运行从 AJAX 调用派生的代码或某些其他外部脚本时,使用 eval 是不好的。此外,这里没有更改或操作window对象,所以我没有看到问题。

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