最近在寫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]=
}