JavaScript中的eval函數(shù)被廣泛應(yīng)用于解析JavaScript代碼和字符串,并將其執(zhí)行或求值。而其中一個特殊的用途是利用它來處理數(shù)組。eval函數(shù)可以將一個由字符串表示的數(shù)組,轉(zhuǎn)換成實(shí)際的JavaScript數(shù)組。
使用eval函數(shù)將字符串轉(zhuǎn)為數(shù)組是十分便捷的,例如,下面這個例子就可以通過eval函數(shù)將一個字符串轉(zhuǎn)成數(shù)組:
var str = "[1,2,3,4,5]"; var arr = eval(str); console.log(arr); // [1,2,3,4,5]
除了直接將字符串作為參數(shù)傳給eval函數(shù),也可以將字符串定義為一個變量,然后把變量傳給eval函數(shù):
var str = "[1,2,3,4,5]"; var arrString = str; var arr = eval(arrString); console.log(arr); // [1,2,3,4,5]
如果數(shù)組中包含有引號或其他特殊字符,可以將整個數(shù)組字符串使用單引號或雙引號包起來
var str = "['Michael Jordan', 'Kobe Bryant', 'LeBron James', 'Shaquille O\'Neal']"; var arr = eval(str); console.log(arr); // ['Michael Jordan', 'Kobe Bryant', 'LeBron James', 'Shaquille O'Neal']
eval函數(shù)的使用雖然十分方便,但是也存在一些安全性問題。由于eval函數(shù)對于傳遞給它的字符串沒有任何的限制,因此可以執(zhí)行任何能夠執(zhí)行的JavaScript代碼。如果該字符串中包含有不安全的代碼,則可能會導(dǎo)致安全性漏洞,所以我們應(yīng)該謹(jǐn)慎使用eval函數(shù)。
最后需要注意的是,eval函數(shù)和JSON.parse方法在將字符串轉(zhuǎn)換為JavaScript對象方面有一些重要的區(qū)別。JSON.parse方法只能處理符合JSON格式的字符串,而eval函數(shù)可以處理任何類型的字符串。此外,JSON.parse方法可以避免在運(yùn)行時執(zhí)行惡意代碼和安全漏洞,而eval函數(shù)則不能保證程序的安全性。
舉個例子:
var str = "{name:'xiaoming',age:18}"; var obj = JSON.parse(str); console.log(obj.name); //xiaoming
eval函數(shù)返回的結(jié)果為一個對象的時候也是會報錯的,所以在使用eval函數(shù)時,建議務(wù)必小心謹(jǐn)慎,避免不必要的安全問題。