我在编写脚本时遇到了一个令人困惑的事实。
如何找到等于另一个变量值的变量。然后,获取该变量的值。
以下是一个例子:
var result;
var 1 = "john";
var 2 = "amy";
var 3 = "micheal";
var info = "1";
当var info设置为1
时,脚本将查找变量1,其值为JOHN
,然后获取值john
。然后将结果的值设置为“john”。
同样的事情,
当var info设置为2
时,脚本将查找变量2,其值为AMY
,然后获取值amy
。然后将结果的值设置为“amy”。
依旧......
我的信息变量的值未确定。它可以是1,2或3,由用户事件设置/确定。
P / S我可以使用if和else,但我想知道如何做到这一点。 :)
那我怎么能这样做呢?
答案 0 :(得分:4)
您可能想要做一些截然不同的事情:
var result;
var names = {
'1': 'john',
'2': 'amy',
'3': 'michael'
};
var info = "1";
result = names[info];
这会将'john'放入result
。
你知道,这定义了一个叫做“查找表”的东西,并将其保存到names
中。然后,您可以使用“键”(在您的情况下:1,2,3)来查找值。写names[info]
会在info
内查找,并获取其值,在上例中为"1"
。然后,它会在"1"
中查找密钥names
,并看到"1"
的值为'john'
。
我知道这并不是你所要求的,但我怀疑它可能会有所帮助。
答案 1 :(得分:1)
数字不是合法的变量名,但你可以使用一些邪恶来做你想做的事:http://jsfiddle.net/2mAeh/2/(仅在Safari中测试过)。 为了清楚起见,我不建议这样做。这很邪恶。
var result;
var a = "amy";
var b = "john";
var c = "micheal";
var info = "a";
var variable = eval("info"); // just to satisfy your requirement, same as info
result = eval(variable);
alert(variable + ' = ' + result);
处理此问题的更好方法是使用地图,使用“变量名称”作为键。在这种情况下,您可以使用数字作为键,但为了保持一致性,我将使用与其他示例相同的键。
var map = { "a": "Amy", "b" : "John", "c" : "micheal" };
var info = "a";
alert( info + ' = ' + map[info] );
答案 2 :(得分:1)
使用window[var]
:
one = 'two';
two = '1';
alert(window[one]); // Alerts: 1
答案 3 :(得分:0)
那我怎么能这样做呢?
你不能。(开箱即用)
您无法仅知道变量名称的值。
如果您真的想要这样做,并想用意大利面条代码付款,请看一下:
Get variable name. javascript "reflection"
或按照@tvanfosson的建议使用eval
来获取变量值,这是危险的并且已弃用。
javascript
中的变量不能以数字开头。 var 1 = "john";
=>的无效强> 答案 4 :(得分:0)
像这样,
function findVariableByName(info){// info is 1, 2, 3
var result;
this['1'] = "john";
this['2'] = "amy";
this['3'] = "micheal";
result = this[info];
alert(result);
return result;
}
findVariableByName(1);
<强>更新强>
如果您更改下面的代码,如果它在全球范围内,
var result;
var 1 =“john”;
var 2 =“amy”;
var 3 =“micheal”;
var info =“1”;
var one = 'john';
var two = 'amy';
var three = 'micheal';
var info = 'one';
你可以,
window[info] // gives you john
答案 5 :(得分:0)
您可以通过设置对象来执行此操作:
// Store your object
var obj = {result: null, a: "john", b: "amy", c: "michael", info: "1"}
// Iterate like so.
for(var key in obj) {
if(obj[key] == info){
alert(key);
}
}
我没有检查过这段代码,但它应该有效。祝你好运!