eval()是Javascript中的內置函數,常用于將字符串轉換為可執行的代碼,同時也可用于將json字符串轉換為Javascript對象。
var jsonString = '{"name": "Tom", "age": 18}'; var jsonObj = eval('(' + jsonString + ')'); console.log(jsonObj.name); //"Tom" console.log(jsonObj.age); //18
其中,eval()函數需要在字符串外加上一對括號用來表示代碼塊,否則在解析時會報錯。
然而,eval()也存在一些危險性。因為它將字符串轉換為代碼執行,所以如果被傳入惡意字符串,就會導致代碼不受控制的執行。
var jsonString = '{"name": "Tom", "__proto__": {"isAdmin": true}}'; var jsonObj = eval('(' + jsonString + ')'); console.log(jsonObj.name); //"Tom" console.log(jsonObj.isAdmin); //true
在上面的例子中,由于字符串中含有特殊屬性__proto__,會導致生成的對象中添加了額外的屬性isAdmin,這將會對系統造成安全隱患。
因此,建議使用JSON.parse()方法來進行json字符串的解析。
var jsonString = '{"name": "Tom", "age": 18}'; var jsonObj = JSON.parse(jsonString); console.log(jsonObj.name); //"Tom" console.log(jsonObj.age); //18