如果只允许字符串传入函数process(),我们应该在函数process()内部做什么来访问数组值。 Eval是其中一种方法,但许多人并不建议使用它。
function demo2(name2)
{
var alpha = [];
alpha["a"] = "test1";
var bravo = [];
bravo["a"] = "test2";
function process(name)
{
alert(window[name]["a"]);
}
process(name2); // error
}
name2可以是“alpha”或“bravo”或许多其他数组的名称。
var alpha = [];
alpha["a"] = "test1";
var bravo = [];
bravo["a"] = "test2";
function process(name)
{
alert(window[name]["a"]);
}
process("alpha");
对于第二个例子,它工作正常。 我只想将字符串传递给函数,并在第一个示例中将其用作数组名称。我有第二个例子,所以我想知道如何在一个函数中做到这一点。
我应该在函数流程中写什么来提醒alpha和bravo变量?
答案 0 :(得分:2)
这个怎么样?
function demo2()
{
var alpha = [];
alpha["a"] = "test1";
var bravo = [];
bravo["a"] = "test2";
function process(name)
{
alert(name["a"]);
}
process(alpha);
process(bravo);
}
答案 1 :(得分:2)
process
可以直接访问alpha
和bravo
(不会被传递)。
您无法通过window[name]
访问这些变量的原因是因为它们不是全局变量。
function demo2()
{
var alpha = [];
alpha["a"] = "test1";
var bravo = [];
bravo["a"] = "test2";
function process(name)
{
alert(alpha["a"]);
alert(bravo["a"]);
}
process();
}
此外,使用字母数字数组下标有点胜过使用数组的目的(不是说它不可能)。具有非数字下标的元素不在所有内置数组函数中(例如join,slice,shift)。
您可以为此目的使用普通对象。
var obj = {};
obj.a = "test"; //OR
obj["a"] = "test";
[编辑] :响应您的评论,几乎没有充分理由使用包含其名称的字符串来引用变量。但是如果你有这样做,你可以考虑制作一个对象的所有数组属性。这与引用window [“something”]相同,如果它们是全局变量,除非您是具有自己对象的替换窗口。
function demo2()
{
var container = {};
container.alpha = [];
container.alpha["a"] = "test1";
container.bravo = [];
container.bravo["a"] = "test2";
function process(name)
{
alert(container[name]["a"]);
}
process("alpha");
process("bravo");
}
答案 2 :(得分:0)
function demo2() { var alpha = []; alpha["a"] = "test1"; var bravo = []; bravo["a"] = "test2"; function process(name) { var x = eval(name); alert(x["a"]); } process("alpha"); process("bravo"); }
答案 3 :(得分:0)
回答你的问题:
function process(name) {
alert(eval(name+'["a"]'));
}
免责声明:如果你没有充分的理由这样做,我会重构你的范围 - 这很难看。