使用eval()...

时间:2015-08-31 16:36:05

标签: javascript eval

我已经看到了其他一些问题,关于不同的问题,试图避免在javascript中使用eval()。

使用eval()调用对象方法会导致问题吗?它看起来工作正常!

基本上,我有以下几点:

var object1 = {
    left: "this is left",
    right: "this is right"
}

我在下拉列表中有一个对象列表,根据选择的对象,我想调用" left"或"对"该物体的财产。

所以我使用:

获取对象名称
var objName = document.getElementById("objects").options[document.getElementById("objects").selectedIndex].text.toLowerCase(); 
//returning, say "object1" from the list

然后我想使用这个变量来调用该对象的属性。我面临的问题是变量是一个字符串,并且为属性返回undefined(" objName.left不是函数")。但是,我发现使用eval()正确地返回了属性,基本上是:

objName.left; //returns undefined
eval(objName).left; //returns "this is left"

就像我说的,这很好但我遇到了一些答案,说避免使用eval()。那么有没有另外一种方法可以做到这一点还是会这样呢?

我还是新手(你可能已经知道了)所以提前感谢您对此查询的任何答案,建议和帮助!

1 个答案:

答案 0 :(得分:3)

如果在全局范围内定义了$ ls -l /usr/local/Cellar/solr4/4.10.4/example/solr/collection1/ total 24 -rw-r--r-- 1 me wheel 2146 8 Sep 2014 README.txt lrwxr-xr-x 1 me wheel 44 7 Jun 13:37 conf -> <path to oscar repo>/sites/demo/deploy/solr drwxr-xr-x 24 me wheel 816 27 Feb 2015 conf.original -rw-r--r-- 1 me wheel 16 8 Sep 2014 core.properties drwxr-xr-x 4 me wheel 136 6 Jun 17:03 data 。您可以使用Bracket notaion

object1

&#13;
&#13;
window[objName].left;
&#13;
&#13;
&#13;

但是我建议您使用主对象,然后您可以使用括号表示法轻松访问它,即使它未在全局范围内定义。

window.object1 = {
    left: "this is left",
    right: "this is right"
}

var objName = "object1";
alert(window[objName].left);