使用另一个变量调用变量,其字符串内容是另一个变量的名称

时间:2018-12-19 18:05:29

标签: javascript jquery angularjs variables

所以我有一堆变量,例如:

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()

2 个答案:

答案 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

编辑:尽管我也同意其他评论,但这似乎是一个可怕的想法,最好以另一种方式实现。