假设我有一个变量,其中包含另一个变量的名称
var foo='varname'
我想得到varname
的值
如果varname
是全局的,我可以做window[foo]
,但varname
不是全局的。
如果这是一个个人项目,我会毫不回头地做eval(foo)
,但在专业环境中,eval
总是不受欢迎,所以我试图首先收集所有可用的选项,看看是否可以避免。
我能想到的唯一替代方案是Function('return '+ foo)()
,但这感觉很像eval
。
我认为答案是否定的,但有没有任何方法可以使用平方符号或类似的"安全"方法来引用一个变量,该变量不是对象的属性?
谢谢
--更多上下文——
变量是在主函数中设置的。要评估的条件来自json文件。大体上,在获得json之后,对条件进行评估。如果条件得到满足,就会发生一些事情。条件采用json格式,如{cond1:{varname:'somevalue'}}
。我想测试varname==='somevalue'
我认为答案是否定的,但有没有任何方法可以使用平方符号或类似的"安全"方法来引用一个不是全局的变量?
你是对的:答案是否定的。相反,使用一个对象和一个属性:
var vars = {
foo: "bar"
};
var varname = "foo";
snippet.log(vars[varname]); // "bar"
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
如果你想加入一些通常不受欢迎的其他,你可以将其与with
语句结合起来,得到看起来像变量,但实际上是属性的东西:
var vars = {
foo: "bar",
baz: "buz"
// ...and so on
};
var varname = "foo";
with (vars) {
snippet.log(vars[varname]); // "bar"
// Looks like a variable:
foo = "updated";
snippet.log(vars[varname]); // "updated"
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
我不是推荐,只是想给你选择。:-)
嘿,你可以用一个数组来做这件事,一个简单的
(function(){
var foo="varname";
var arr=[];
function ls(){
arr["varname"]="soy varname";
console.log(arr[foo]);
}
ls();
})();
http://jsfiddle.net/bbsw99g8/