js字符串定义为变量名,通过字符串查找变量

最近在写js的时候碰到了难题,我又一个页面需要生成很多的变量。但是变量的名称是根据参数的不同而区分的。

1、字符串定义为变量名

例如可能需要生成的变量名字 url_1,url_2,url_3… (后面的数字是根据参数来的)。 所以我的函数名 应该由 var ‘变量名’ = “url_”+num; 生成函数名 但这问题就来了。

初始化变量时等号左边是不允许是表达式的。
所以 var "url_"+num = " http://www.1234.com"; 这肯定是错误的。后来问了度娘后才知道。可以使用 window[字符串变量名] = 100 这种方式来定义变量。看代码

function createVariable(num){
    var name = "url_"+num;   //生成函数名
    window[name] = 100;
    //注意看中括号里的内容加引号和不加引号的区别
    //加引号代表name为字符串,而不是上面的name变量'url_*'
    window['name'] = 200;   
    }

    create_variable(2);
    alert(url_2); // 100;
    alert(name); //200;

window用中括号的方式定义 变量时,中括号里的内容应该是字符串。如果是一个变量的话,他就会解析这个变量找到具体的值。

2、通过字符串查找变量

这种情况是我已经定义好了多个类似“url_1,url_2,url_3……”的有规律变量,但是当动态引用变量的时候获取变量的值是个问题

//使用freemarker遍历集合批量生成变量  
<#list audioUrlList?if_exists as item>
    var audioUrl_${item_index}="${item}";
#list>

根据指定的角标调用时可以用

function getUrl(index){
    var variableName = "audioUrl_"+index;
    return eval(variableName);
}

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码

附:其他方式解决 字符串定义为变量名

1、用对象的形式

var object = {};
    for(var i=0;i<10;i++){
        object['var_'+i]='';
    }

2、用数组的形式

var arr=[];
for(var i=0;i<xxx.length;i++ )
{
    arr[i]=
}

你可能感兴趣的:(JavaScript)