使用评估()...
Using eval()...
我在其他一些关于不同问题的答案中看到,试图避免在 javascript 中使用 eval()。
使用 eval() 调用对象方法会导致问题吗?似乎工作正常!
基本上,我有以下几条路线:
var object1 = {
left: "this is left",
right: "this is right"
}
我在下拉列表中有一个对象列表,根据选择的对象,我想调用该对象的 "left" 或 "right" 属性。
所以我使用以下方法获取对象名称:
var objName = document.getElementById("objects").options[document.getElementById("objects").selectedIndex].text.toLowerCase();
//returning, say "object1" from the list
然后我想用这个变量来调用那个对象的属性。我遇到的问题是变量是一个字符串,并且为 属性 ("objName.left is not a function") 返回未定义。但是,我发现使用 eval() 正确返回了 属性,基本上是:
objName.left; //returns undefined
eval(objName).left; //returns "this is left"
就像我说的,这很好用,但我遇到了一些回答说要避免 eval()。那么有没有其他方法可以做到这一点?
我对此还是个新手(你可能会说)所以在此先感谢您对此问题的任何回答、建议和帮助!
如果object1
定义在全局范围内。您可以使用 Bracket notaion
window[objName].left;
window.object1 = {
left: "this is left",
right: "this is right"
}
var objName = "object1";
alert(window[objName].left);
但是我建议您使用 master 对象,这样您就可以使用括号表示法轻松访问它,即使它没有在全局范围内定义。
var master = {
object1: {
left: "this is left",
right: "this is right"
}
}
var objName = "object1";
alert(master[objName].left);
我在其他一些关于不同问题的答案中看到,试图避免在 javascript 中使用 eval()。
使用 eval() 调用对象方法会导致问题吗?似乎工作正常!
基本上,我有以下几条路线:
var object1 = {
left: "this is left",
right: "this is right"
}
我在下拉列表中有一个对象列表,根据选择的对象,我想调用该对象的 "left" 或 "right" 属性。
所以我使用以下方法获取对象名称:
var objName = document.getElementById("objects").options[document.getElementById("objects").selectedIndex].text.toLowerCase();
//returning, say "object1" from the list
然后我想用这个变量来调用那个对象的属性。我遇到的问题是变量是一个字符串,并且为 属性 ("objName.left is not a function") 返回未定义。但是,我发现使用 eval() 正确返回了 属性,基本上是:
objName.left; //returns undefined
eval(objName).left; //returns "this is left"
就像我说的,这很好用,但我遇到了一些回答说要避免 eval()。那么有没有其他方法可以做到这一点?
我对此还是个新手(你可能会说)所以在此先感谢您对此问题的任何回答、建议和帮助!
如果object1
定义在全局范围内。您可以使用 Bracket notaion
window[objName].left;
window.object1 = {
left: "this is left",
right: "this is right"
}
var objName = "object1";
alert(window[objName].left);
但是我建议您使用 master 对象,这样您就可以使用括号表示法轻松访问它,即使它没有在全局范围内定义。
var master = {
object1: {
left: "this is left",
right: "this is right"
}
}
var objName = "object1";
alert(master[objName].left);