将javascript字符串转换为代码而不使用eval

时间:2011-09-12 16:13:57

标签: javascript eval

我正在尝试在不使用eval()的情况下执行以下操作,因为很多帖子都说它很慢而且很邪恶所以你不应该使用它,因为总会有其它方式。

JS(注意我正在使用jquery)

$('a').click(function() {

//Assign myVar to the id value of the a tag 
var myVar = $(this).attr('id');


$.getJSON("assets/js/json.js", function(json) {
    alert("json."+myVar+".thumb");
    }); 

});

我有一些基本的html,传递myVar的值

<a id="imageID1" href="#">A link 1</a><br />
<a id="imageID2" href="#">A link 2</a>

基本JSON文件

   {
"imageID1" : {
    "thumb" : "assets/images/312px.png",
    "zoomThumb" : "assets/images/gallery/_AR_0063_m_thumb.jpg",
    "large" : "assets/images/gallery/_AR_0063.jpg"
},

 "imageID2" : {
    "thumb" : "another.png",
    "zoomThumb" : "assets/images/gallery/_anotherb.jpg",
    "large" : "assets/images/gallery/another.jpg"
}

  }

因此,每个链接的ID都会在点击时传递给myVar,这样可以正常工作,但警报值不正确。

例如,如果单击imageID2,警报应该实际显示“another.png”,而是显示我实际想要运行的代码,“json.imageID @ .thumb”。

现在我可以将提示行更改为

   alert(eval("json."+myVar+".thumb"));

这就是诀窍,但如上所述,由于已知的问题,不想使用eval。

所以任何替代方法都可以做到。 提前感谢任何帮助或提示。

2 个答案:

答案 0 :(得分:4)

你正在尝试写

alert(json[myVar].thumb);

Indexer表示法可用于在运行时按名称检索属性。

答案 1 :(得分:1)

这应该有用,我相信:alert(json[myVar].thumb);