JavaScript中的eval()函数使用介绍
在JavaScript中,可以使用eval()函数来解析字符串中的JavaScript代码,并返回相应的代码执行结果:
console.log(eval("42*2"));//84
就本质而言,eval()是JavaScript全局对象的一个函数。比如,上述代码等价于:
console.log(this.eval("42*2"));//84
不过在使用eval()语句时,一般都采用上述第一种做法,也即忽略全局对象直接使用eval()。
eval()的使用
基于以下两个原因,除非确实需要,不然应尽量避免在代码中使用eval()语句:
1.从逻辑上来说,字符串应该用于储存程序运行过程中的内容、信息,而不应该用于储存具体的计算逻辑。
2.由于eval()参数为字符串,而对于一段字符串无法词法进行,因此对于eval()调用语句,JavaScript解释器无法进行优化。
eval()的返回值
eval()的返回值遵循以下规则:
1.如果eval()的参数不是字符串,那么eval()将直接返回参数。
2.如果eval()的参数是字符串,那么eval()将这个字符串解析成代码后进行执行,并返回最后一行代码执行的结果。
3.如果字符串无法解析成合法的代码,eval()将抛出SyntaxError错误。
4.如果字符串能够被解析成合法的代码,但是在执行这一代码过程中报错,那么这个错误会上报给eval()语句,并由eval()抛出。
console.log(eval([1,2,3]));//[1,2,3] console.log(typeofeval([1,2,3]));//object
console.log(eval("42*/2"));//SyntaxError console.log(eval("42*2;22*3;"));//66.evalreturnstheresultoflastexpression/statement console.log(eval("null.toString()"));//TypeError,exceptionineval-edcodewillbepropagatedoutsideeval().