首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用eval()..。

使用eval()..。
EN

Stack Overflow用户
提问于 2015-08-31 16:36:04
回答 1查看 90关注 0票数 0

我在其他一些关于不同问题的答案中见过,试图避免在javascript中使用eval()。

使用eval()来调用object方法会引起问题吗?好像挺好的!

基本上,我有以下几点:

代码语言:javascript
复制
var object1 = {
    left: "this is left",
    right: "this is right"
}

我在下拉列表中有一个对象列表,根据选择的对象,我要调用该对象的“左”或“右”属性。

因此,我使用以下方法获得对象名称:

代码语言:javascript
复制
var objName = document.getElementById("objects").options[document.getElementById("objects").selectedIndex].text.toLowerCase(); 
//returning, say "object1" from the list

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

代码语言:javascript
复制
objName.left; //returns undefined
eval(objName).left; //returns "this is left"

就像我说的那样,这很好,但是我遇到了一些回答,它们说要避免eval()。那么,是否有其他方法来做到这一点,或这将是好的?

我仍然是新手(你可能会说),所以提前感谢你的回答,建议和帮助这个查询!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 16:39:55

如果object1是在全局范围内定义的。您可以使用托槽

代码语言:javascript
复制
window[objName].left;

代码语言:javascript
复制
window.object1 = {
    left: "this is left",
    right: "this is right"
}

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

不过,我建议您使用master,这样您就可以使用括号表示法轻松地访问它,即使它在全局范围中没有定义。

代码语言:javascript
复制
var master = {
    object1: {
        left: "this is left",
        right: "this is right"
    }
}

var objName = "object1";
alert(master[objName].left);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32315906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档