所以我有一堆变量,例如:
var HelloBob = '123';
var HelloSally = 'abc';
var HelloTim = 'pie';
我需要通过构造它们的名称并在另一个变量中包含它们的名称来引用这些变量。
因此它将输出“ 123”而不是“ Hellobob”
var name = 'bob';
console.log('Hello'+bob)
我以前使用Window []完成此操作(我认为),但是我尝试使用它,但它不起作用。例如...
var HelloBob = '123';
var name = 'bob';
if(typeof window['Hello'+name] !== undefined){
console.log('Variable Exists')
}
仅当存在名称为“ Hellobob”的变量时才应为true,但在运行它时始终为true。
我需要能够完全引用变量,以便能够执行.toLowerCase()
答案 0 :(得分:2)
您的代码段存在几个问题:
typeof
返回一个字符串-您正在将结果与undefined
(全局范围的属性)而不是'undefined'
(类型字符串)进行比较Hellobob
不存在。将name
设置为Bob
(而不是bob
)应该可以解决此问题。
var HelloBob = '123';
var name = 'Bob';
if (typeof window['Hello' + name] !== 'undefined') {
console.log('Variable exists:', window['Hello' + name]);
}
如评论中所述,通常这不是遵循的好模式。相反,请考虑创建一个包含以下变量的对象:
var hello = {
Bob: '123',
Sally: 'abc',
Tim: 'pie',
};
var name = 'Bob';
if (hello.hasOwnProperty(name)) {
console.log('Variable exists:', hello[name]);
}
答案 1 :(得分:-3)
我知道的最好方法是使用eval:
var HelloBob = '123';
var HelloSally = 'abc';
var HelloTim = 'pie';
function getGreeting(name) {
var greetingVar = 'Hello'+name;
var greeting = null;
try {
greeting = eval(greetingVar);
} catch (err) {
console.error("Tried to get greeting for a person that doesn't exist.");
}
return greeting;
}
console.log(getGreeting('Bob'));
console.log(getGreeting('Scott'));
另请参阅:Use dynamic variable names in JavaScript
编辑:尽管我也同意其他评论,但这似乎是一个可怕的想法,最好以另一种方式实现。