然而,eval
会带来一些意想不到的问题:
- 安全性问题:你的字符串可能会被注入其他的命令或者第三方脚本。
- 可调试问题:很难去调试错误信息。
- 压缩问题:程序不会对字符串进行最小化压缩。
不幸的是,在实际的开发中,eval
经常会被滥用,例如解析 JSON 字符串,虽然使用eval
可以正常工作,但是我们应该尽量避免使用它,例如使用JSON.parse
方法。
那么,我们如何才能不用 eval 的方式通过字符串调用 JavaScript 的方法呢?
我们可以使用windows对象来实现
function aa(){
alert("1")
}
window["aa"] // output function aa(){alert("1")}
window["aa"]() //1
那么我们可以利用这个特性来封装一个方法
function aa(string,abc){
alert(string+abc)
}
function happyEeval(object,functionName,argumentsArray){
return window[functionName].apply(null,arguments)
}
happyEeval(null,"aa",["hello",123]);
不解释 完成了!