Js編程過程中,或多或少會出現(xiàn)需要動態(tài)生成一系列變量名,數(shù)量比較大時也不方便提前聲明,這時候可能就需要先進行字符串拼接,然后將拼接的字符串轉(zhuǎn)換為變量名。
當(dāng)我們需要生成很多的變量,但是變量的名稱是根據(jù)參數(shù)的不同而區(qū)分的,如 date_1,date_2,datet_3... (后面的數(shù)字是根據(jù)參數(shù)來的),那我們就需要寫一個var name = "test_"+num;
,這樣的函數(shù)來生成變量名。
- 1、最簡便的方法,通過
var name = eval('test_'+num)
這樣就可以了,但并不推薦使用eval
函數(shù)。 - 2、使用
window[name]
等價于window.name
可以改造為var name = window['test_'+num]
,缺點一目了然,污染了全局變量,不過可以將其掛在到局部變量上。 - 3、使用new Function
貢獻(xiàn)自FCC-星空
function strToVar(str) {
var json = (new Function("return " + str))();
return json;
}
strToVar("name")
console.log(name)//true,變量已生成,但未賦值。
eval(),new Function() 性能安全性并不好,不推薦使用
- 4、采用數(shù)組的形式
var arr = [];
for (var i = 0,var len = some.length; i < len; i++){
arr[i]['test_' +i]= null;
}
變量在數(shù)組中都有對應(yīng)的下標(biāo),賦值和調(diào)用都不是很方便,但可能在特殊的使用環(huán)境中有奇效。
總結(jié):最佳使用方法通過var name = obj[strname]
實現(xiàn)字符串轉(zhuǎn)為變量。
廣告:希望了解更多前端非常規(guī)知識的可以查看我長期更新的前端非常規(guī)知識總結(jié)