将字符串转换为JavaScript对象 - 是否比使用eval更安全?

时间:2010-02-13 21:02:01

标签: javascript jquery eval

我希望创建一个简化的界面,要求用户选择三个单选按钮中的一个,如下所示:

<form id="icon-type">
    <input type="radio" name="icon" value="apples" /> Apples
    <input type="radio" name="icon" value="oranges" /> Oranges
    <input type="radio" name="icon" value="graphes" /> Grapes
</form>

使用jQuery可以很容易地确定选择了哪三个:

var iconType = $('input[name=icon]:checked').val();

但是,我需要将分配给iconType的字符串转换为先前创建的同名对象。我已经读过eval()是执行此操作的最佳方式,但也遇到了许多警告,指出永远不应使用eval()。但是,似乎没有其他方法可以执行此转换。因此,我的问题是:虽然我认识到eval()肯定会被滥用,但eval()确实是恰当的方法吗?

非常感谢!

编辑:@DVK,谢谢!虽然还有点丢失;假设我的对象看起来像这样:

var apple = new GIcon(baseIcon);
apple.image = "http://localhost/images/apple.png";

var orange = new GIcon(baseIcon);
orange.image = "http://localhost/images/orange.png";

所以我需要将从所选单选按钮检索到的值转换为适当的对象引用。当你解释时,我如何将它们存储在哈希中?谢谢!

2 个答案:

答案 0 :(得分:3)

对于像这样的简单字符串,您也可以简单地将匹配的对象存储在哈希中,并像这样访问

var obj = object_map[iconType];

答案 1 :(得分:1)

var obj = window[iconType]

您也可以将对象直接链接到输入。

$(function() {
    var form = $("#icon-type");
    form.get(0).iconTypeObject = new Apples();
    form.get(1).iconTypeObject = new Oranges();
    form.get(2).iconTypeObject = new Grapes();
});

var iconObject = $('input[name=icon]:checked')[0].iconTypeObject;