一、eval方法只能在非严格模式中进行使用,在use strict中是不容许使用这个方法的。函数
二、eval函数接收一个参数s,若是s不是字符串,则直接返回s。不然执行s语句。若是s语句执行结果是一个值,则返回此值,不然返回undefined。 须要特别注意的是对象声明语法“{}”并不能返回一个值,须要用括号括起来才会返回值。以下:code
var code1='"a" + 2'; //表达式
var code2='{a:2}'; //语句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->2
alert(eval('(' + code2 + ')')); //->[object Object]对象
当eval中的字符串内是对象时加上括号则能够将原对象原样返回,若是将code2={a:2,b:3}时直接eval(code2)时会报错,加上括号就会将code2原样返回。字符串
三、eval直接在函数内部使用则返回的是局部变量io
function te (){function
eval('var a=1;')变量
}object
te();语法
alert(a);//这样会报错,由于a是局部变量,只能在te方法内使用方法
四、有两种的处理方式能够使在函数内部使用的eval成为全局变量
(1)利用window.eval()使其成为全局的
function te (){
window.eval(‘var a=1’)
}
te();
a 变量也是全局的
(2) function te (){
var a=eval;
a(‘var b=1’);
}
te();
这种方式下变量b 也是全局的。
因此说在非严格的模式下,又多了一种方法将JSON字符串形式转换为对象的形式。就是利用var m=eval(‘(’+data+’)’),m是JSON对象。
其功能和JSON.parse()是类似的,可是当已经为经过JSON.parse()转换为对象后的JSON不能再调用该函数继续进行转换,
这样会报错,可是eval()方法不会当传入字符串是对象使继续使用上述的方式,然会返回原对象。