通过文字变量名访问变量(除了eval和like)

时间:2014-11-09 14:38:49

标签: javascript eval

说我有一个变量,其中包含另一个变量的名称

var foo='varname'

我想获得varname

的值

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

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

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

我认为答案是否定的,但有没有办法引用一个变量,它不是一个对象的属性,它不是全局的,使用方形符号或类似的“安全”方法?< / p>

谢谢

- 更多背景 -

变量在主函数中设置。要评估的条件来自json文件。总的来说,在获得json之后,评估条件。如果满足条件,就会发生一些事条件采用json格式,如{cond1:{varname:'somevalue'}}。我想测试varname==='somevalue'

2 个答案:

答案 0 :(得分:3)

  

我认为答案是否定的,但有没有办法使用方形符号或类似的方式来引用非全局变量&#34; safe&#34;方法

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

&#13;
&#13;
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;
&#13;
&#13;

如果你想引入一些通常不赞成的 else ,你可以将它与with语句结合起来,以获得看起来喜欢变量,但事实上属性:

&#13;
&#13;
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;
&#13;
&#13;

不推荐它,只是试图给你选择。 : - )

答案 1 :(得分:-1)

嘿,你可以使用一个数组来做一个简单的

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

         console.log(arr[foo]);
    }

    ls();
})();

http://jsfiddle.net/bbsw99g8/