2021-07-20 JavaScript中关于eval()方法
eval()常见用途
1.使用ajax获取到后台返回的json数据时,使用 eval 这个方法将json字符串转换成对象数组
let jsonString = JSON.stringify({fang:'方'})
const jsonObject = eval('('+jsonString+')')
console.log('jsonObject--->',jsonObject)
替代eval()方法
替代的方法都是不是绝对安全。特别在node里使用的,更不安全。
要确保传的代码字符串不会牵扯到一系列的安全问题。最好在使用eval()或者是自己定义的evil()之前,先过滤一遍,确保不用引入用户输入的恶意代码。
1、新建一个script标签
function evil(str) {
const script = document.createElement('script');
script.type="text/javascript";
script.text=str;
document.getElementsByTagName('head')[0].appendChild(script);
document.head.removeChild(document.head.lastChild);
}
由于用到了document这个浏览器对象,所以在node等环境里,可能会用不了。不过可以使用let,var,const等来声明局部变量,也可以直接声明或修改全局变量。
2、new 一个function函数
function evil(fn) {
const Fn = Function;//一个变量指向Function,防止有些前端编译工具报错
return new Fn('return ' + fn)();
}
这种方法比上面那种方法要来的方便,且在node里也可使用。不过不可以使用let,var,const等来声明局部变量。但可以直接声明或修改全局变量。