在不使用eval的情况下将javascript字符串转换为代码

Converting javascript string to code without using eval

本文关键字:字符串 javascript 转换 代码 情况下 eval      更新时间:2023-09-26

我试图在不使用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被点击,警报实际上应该显示"other.png",但它显示的是我实际想要运行的代码,"json.imageID@.thumb".

现在我可以将警戒线更改为

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

这很管用,但如上所述,由于已知问题,不想使用eval。

因此,任何其他方法都可以做到这一点。提前感谢您的帮助或提示。

Ben

您正在尝试编写

alert(json[myVar].thumb);

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

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