2021年1月4日 星期一

【Javascript】建立和存取動態變數名稱

對寫C/C++的人來說,javascript和php都有一個神奇的功能,就是動態變數名稱。在javascript裡,不管是一般動態變數,或者物件裡的成員是動態變數,都可以使用eval()方法存取(PHP我要回去翻翻以前的code)。

有時候會有一個需求,想在某種情況代入變數Value_A,某些時候代入變數Value_B,那可能會寫:

var output = ''; 

if (status=='A'){

    output = Value_A

}

if else(status=='B'){

    output = Value_B

}

alert(output);


但若是情況有100種,豈不是要寫100個判斷式處理

這時,可以使用eval()方法來處理:

var output = eval('Value_' + status); 

alert(output);

上述方式,將可在status為A時,取到Value_A的值,status為GG時,取到Value_GG的值,大大使程式碼更加靈活。


eval()也就是將函式內的內容組合完成後,以JavaScript執行,所以能夠產生許多巧妙的變化,常被舉的例子是:

var n=2;

var b=3,c=4; 

eval('a'+n+'=b*c');

上式會得出a2變數為12。


補充動態變數的寫法:

在全域宣告一個變數,它會變成window的子物件,我們把該變數當作特性去讀寫

過程:

var i = "0";

this['str'+i] = 100;

結果:

console.log(str0); //會回傳100


function內也是一樣

function func(){

var a = '123';

for(i=0;i<=5;i++){

this['a'+i] = i;

console.log(this['a'+i]);

}

}

func();

//會印出6次結果,分別是0~5


REF

https://stackoverflow.com/questions/5117127/use-dynamic-variable-names-in-javascript

http://wangshifuola.blogspot.com/2014/02/jseval.html

沒有留言:

張貼留言