在使用eval函数()函数在Javascript
在Javascript中,eval()函数可以用来解析Javascript代码中的字符串并返回相应的代码执行的结果:复制代码代码如下所示:
console.log(eval(42×2)); / / 84
在本质上,eval()是一个全球性的Javascript对象的功能。例如,上面的代码是等价的:
复制代码代码如下所示:
console.log(this.eval(42×2)); / / 84
然而,在使用eval()语句,一般采用第一种方法,即忽视评价直接使用()的全局对象。
使用eval()
有两个原因,除非你真的需要它,你应该尽量避免使用eval()的代码语句尽可能:
1。逻辑上,一个字符串应该用来存储正在运行的程序的内容和信息,而不应该用来存储特定的计算逻辑。
2、因为eval()的参数是一个字符串,但对于一个字符串不能词汇,所以对eval()调用语句,Javascript解释器不能优化。
eval()的返回值
eval()的返回值遵循以下规则:
1。如果eval()的参数不是一个字符串,然后eval()将直接返回参数。
2。如果eval()的参数是一个字符串,然后eval()执行字符串作为代码和返回的最后一行代码的执行结果。
三.如果不能将字符串解析成一个合法的代码,eval()将查询错误。
4、如果一个字符串可以被解析成一个合法的代码,这将给eval()的声明和报告被通过eval()时执行的代码。
复制代码代码如下所示:
console.log(eval({1,2,3})); / / { 1, 2, 3 }
console.log(typeof eval({1,2,3})); / /对象
console.log(eval(42 / 2)); / /查询
console.log(eval(42×2;22×3;))); / / 66。eval返回最后一个表达式或语句的结果
console.log(eval(null.tostring(())); / /列表,在eval版代码异常将传播外()。
可变环境(可变环境)
有一个重要特点,eval(Javascript):eval()的参数字符串可以访问外部代码的变量,也可以将新的变量参数字符串中码外码,如果eval()的参数字符串可以合法进行解析,然后将解析JS代码行在eval()位于。
复制代码代码如下所示:
可变环境
var a=108;
console.log(eval(功能的双(x){ return x×2;} =双(一))))
console.log(一); / / 216
console.log(双(33)); / / 66
值得注意的是,实现上述功能的前提是,在eval代码()的参数字符串可以合法解析。除了代码语法正确,JS还要求在eval()的代码参数字符串必须是独立的:只有在参数字符串的代码,代码必须是有意义的例如,一个字符串如还不能被传递给eval()函数:
复制代码代码如下所示:
函数测试(){
var;
eval(回报;);
}
试验(); / /查询返回不功能
如果我们使用eval()函数直接,是由代码eval()的参数字符串的变量访问该变量的函数eval()的声明,即使用eval()函数的变量环境局部变量的环境。如果你不使用eval()函数,而不是使用一个新的变量,同时指出eval()函数,这是相应的参数字符串访问的变量都是全局变量,即使用eval()函数的变量环境是全球环境变化。
复制代码代码如下所示:
本地变量环境和全局变量环境
VaR改名= eval;
var
函数f(){
var;
eval(x = 'changed;);
返回x;
}
函数g(){
var;
改名(Y = 'changed;);
回到Y;
}
console.log(f()(),x); / / newchanged起源
console.log(g()(),y); / /新originchanged
然而,值得注意的是,在IE6,7的行为,和8是不同的。在IE6,7,和8,即使eval()函数是改名,仍作为局部变量的环境。