JavaScript中的eval函數相當于將字符串作為腳本代碼進行執(zhí)行。
這樣做有時候能夠讓我們以簡潔的方式進行代碼的書寫,但是也存在一些風險。
例如:
eval("alert('hello')"); //彈出hello
上面的代碼直接運行了一個包含alert語句的字符串,從而達到了彈出hello的效果。
但是,當使用eval的時候,需要特別注意安全問題。
例如下面的代碼:
var str = "alert('hello')"; eval(str);
這段代碼展示了如何先將alert語句存儲在變量str中,然后再使用eval來進行執(zhí)行。
然而,如果str的值是來自于外部用戶的輸入,我們就存在被注入惡意代碼的風險。
例如,如果惡意用戶輸入了如下字符串:
"alert('I'm hacking your computer');"
那么我們在使用eval執(zhí)行str時就會直接彈出這段惡意代碼,從而導致安全事故。
此外,eval函數還存在一些性能問題。
例如,下面的代碼就會因為eval函數的頻繁調用而導致性能下降:
for(var i = 0; i < 10; i++) { eval("var value_" + i + " = i;"); }
一般來說,類似于這種情況下我們可以使用數組或者對象來代替eval。
例如:
var values = {}; for(var i = 0; i < 10; i++) { values["value_" + i] = i; }
這樣就可以較為方便地實現和eval同樣的效果,同時也不會存在性能問題或者安全問題。
總之,在使用eval時需要時刻保持警惕,避免被惡意代碼注入。
上一篇ajax接收到數據再刷新
下一篇ajax接收后臺二維數組