说我有一个变量,其中包含另一个变量的名称
var foo='varname'
我想获得varname
如果varname
是全局的,我可以window[foo]
,但varname
不是全球性的。
如果这是个人项目,我会eval(foo)
不回头,但在专业环境中eval
总是不受欢迎,所以我试图首先收集所有可用的选项,看看是否可以避免。
我能想到的唯一选择是Function('return '+ foo)()
,但这感觉非常像eval
。
我认为答案是否定的,但有没有办法引用一个变量,它不是一个对象的属性,它不是全局的,使用方形符号或类似的“安全”方法?< / p>
谢谢
- 更多背景 -
变量在主函数中设置。要评估的条件来自json文件。总的来说,在获得json之后,评估条件。如果满足条件,就会发生一些事条件采用json格式,如{cond1:{varname:'somevalue'}}
。我想测试varname==='somevalue'
答案 0 :(得分:3)
我认为答案是否定的,但有没有办法使用方形符号或类似的方式来引用非全局变量&#34; safe&#34;方法
你是对的:答案是否定的。相反,使用对象和属性:
var vars = {
foo: "bar"
};
var varname = "foo";
snippet.log(vars[varname]); // "bar"
&#13;
<!-- 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>
&#13;
如果你想引入一些通常不赞成的 else ,你可以将它与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"
}
&#13;
<!-- 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>
&#13;
我不推荐它,只是试图给你选择。 : - )
答案 1 :(得分:-1)
嘿,你可以使用一个数组来做一个简单的
(function(){
var foo="varname";
var arr=[];
function ls(){
arr["varname"]="soy varname";
console.log(arr[foo]);
}
ls();
})();