Javascript 按文字变量名访问变量(eval和likes除外)

Javascript 按文字变量名访问变量(eval和likes除外),javascript,eval,Javascript,Eval,假设有一个变量包含另一个变量的名称 var foo='varname' 我想获得varname 如果varname是全局的,我可以做window[foo],但是varname不是全局的 如果这是一个个人项目,我会做eval(foo)而不回头看,但在专业环境中eval总是不受欢迎,所以我试图首先收集所有可用的选项,看看是否可以避免 我能想到的唯一选择是函数('return'+foo)(),但这感觉非常像eval 我认为答案是否定的,但是否有任何方法可以使用平方表示法或类似的“安全”方法来引用不是全

假设有一个变量包含另一个变量的名称

var foo='varname'

我想获得
varname

如果
varname
是全局的,我可以做
window[foo]
,但是
varname
不是全局的

如果这是一个个人项目,我会做
eval(foo)
而不回头看,但在专业环境中
eval
总是不受欢迎,所以我试图首先收集所有可用的选项,看看是否可以避免

我能想到的唯一选择是
函数('return'+foo)(
),但这感觉非常像
eval

我认为答案是否定的,但是否有任何方法可以使用平方表示法或类似的“安全”方法来引用不是全局对象属性的变量

多谢各位

--更多上下文--

变量在主函数中设置。要计算的条件来自json文件。基本上,在获得json后,将对条件进行求值。如果条件得到满足,就会发生一些事情。条件是json格式的,比如
{cond1:{varname:'somevalue'}
。我想测试
varname==='somevalue'

我认为答案是否定的,但有没有办法使用平方表示法或类似的“安全”方法来引用非全局变量

你是对的:答案是否定的。相反,请使用对象和属性:

var变量={
傅:“酒吧”
};
var varname=“foo”;
snippet.log(vars[varname]);//“条形图”

嘿,你可以用一个数组来做这件事

(function(){
    var foo="varname";
    var arr=[];
     function ls(){
        arr["varname"]="soy varname";

         console.log(arr[foo]);
    }

    ls();
})();

JavaScript(将您已经完成的
eval()
new Function()
放在一边)无法形成对变量的引用。在C++中,可以使用<代码>和/代码>一元运算符来完成此操作,但是JavaScript没有等效项。@ Amit Joki。变量在主函数中设置。要计算的条件来自json文件。基本上,在获得json后,将对条件进行求值。如果条件得到满足,就会发生一些事情。条件是json格式的,比如
{cond1:{varname:'somevalue'}
。我想测试
varname==='somevalue'
.Wow,thx的
snippet.log(),以前从未见过,也从未参与过这么多的代码片段though@A.Wolff::-)它(你在代码段中看到的脚本链接)是我(希望是暂时的)对这个问题的回答确实应该是代码段中内置的东西,但现在…。@T.J.Crowder。谢谢你的回答。然而,正如您可能已经收集到的,我正在寻找一种不需要重新构造变量设置方式的方法。@vinz:不幸的是,不需要阅读答案的前六个单词。:-)尽管我在上面为您添加了第二个选项。@T.J.Crowder。感谢您添加第二个选项。现在我只需要将它与一个
try catch
组合,我就可以开始了:)。我接受你的前七个词作为答案。这是有效的,因为数组是对象,但它与它是数组这一事实无关。您只需要一个对象(
{}
)即可。您的意思是
var arr={}
?:)@T.J.克劳德。我的评论实际上是针对埃内斯托的回答,但当我点击“添加评论”时,你已经回答了,我的评论就在你的下面:)但我不知道为什么会有否定的观点,是的,数组是对象,那又怎样?他做了什么needs@Ernesto. 谢谢你试着回答我的问题,谢谢。话虽如此,但我同意您的解决方案只起作用,因为JavaScript数组中是对象,您要做的是访问对象的属性,而不是像PHP中那样访问关联数组的键。我想,对于任何JavaScript初学者来说,我的反对票是不要通过模仿你在那里提出的建议来养成坏习惯。