Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用另一个变量调用变量,该变量的字符串内容是其他变量';名称_Javascript_Jquery_Angularjs_Variables - Fatal编程技术网

Javascript 使用另一个变量调用变量,该变量的字符串内容是其他变量';名称

Javascript 使用另一个变量调用变量,该变量的字符串内容是其他变量';名称,javascript,jquery,angularjs,variables,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 = '12

所以我有一系列变量,比如:

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”的变量时,该值才应为真,但在运行该变量时,该值始终为真


我需要能够完全引用变量,以便能够执行。toLowerCase()

您的代码片段有几个问题:

  • typeof
    返回一个字符串-将结果与
    未定义的
    (全局范围的属性)进行比较,而不是
    “未定义的”
    (类型字符串)
  • 您正在形成一个不存在的变量名
    hellobobab
    。将
    name
    设置为
    Bob
    (而不是
    Bob
    )应该可以解决此问题
var hellobobab='123';
变量名称='Bob';
如果(窗口类型['Hello'+name]!=='undefined'){
log('变量存在:',窗口['Hello'+name]);

}
我知道的最好的方法是使用eval:

var hellobobab='123';
var HelloSally='abc';
var HelloTim=‘派’;
函数getGreeting(名称){
var greetingVar='Hello'+name;
var=null;
试一试{
问候语=评估(问候语变量);
}捕捉(错误){
错误(“试图为不存在的人获取问候语。”);
}
回敬问候;
}
log(getGreeting('Bob'));

log(getGreeting('Scott')为什么不将所有值收集为自定义对象的属性,这很容易访问,而不需要进行全局处理。
typeof something
返回一个字符串,即
!==未定义,但为“未定义”
否,Hellobob不存在。像这样围绕变量名组织的HelloBob doesCode具有强烈的代码味道。为此,您应该使用像对象这样的真实数据结构。一切都会更容易编码、阅读、维护,也不会那么脆弱。uhh
undefined
不是一个对象,但你通常是对的。
null
常量被
typeof
称为“object”,但这只是一个长期的奇怪现象。@Pointy Good point,我的更新是否更准确?关于你的第一个代码,我从未通过if检查,我发现我以前使用window[]的项目,那里的代码在我当前的项目中不起作用。我用你修改过的代码做“console.log(window['Hello'+name]);”,它会输出“undefined”@Vereonix。你能提供一个可复制的例子吗?我的回答中的片段似乎很好地发挥了作用,这是一个非常重要的建议。OP的问题只是缺少几个引号。我不知道是谁对此投了赞成票,但他们真的应该非常注意他们投票的内容。这里没有理由使用eval。window[]引用不依赖于在浏览器环境中运行的全局变量吗?这真的是一个比eval更好的解决方案吗?考虑到
eval()
实际上执行您传递给它的任何内容,是的,
window[varname]
肯定更好,即使它由于作用域而失败。是的,这在现实世界中肯定是一个安全问题。说得对。