方法1:eval函数
计算某个字符串,并执行其中的的 JavaScript 代码.只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
//(1):eval参数若不是字符串,直接返回参数本身
var o1=new Object();
eval(o1);
var o2={a:1,b:0} ;
eval(o2);
//(2)参数为字符串,运行代码
/* example.1 */
var o3="{a:2}";
var o4=eval(o3) //等效于 var o4=2; (标记1)
/* example.2 */
o3="{name:'Tom',age:22}"; //json类型
var o5=o3;
//eval(o3); //错误,eval在执行字符串时,将{}当成语句块,语句块中的代码有误(在于逗号)
o3="{name:'Tom';age:22}";
eval(o3) //对比:语句块中代码可以运行,在行内直接写name:'Tom'是没有问题的,如字符,数字类似,所以无异常
alert(eval(o3));//输出22,同上面(标记1)很相似,总是返回最后一个常量表达式,如age:22本身为一个常量表达式,其值为22,虽然写法上很怪异
//(3)解析json
var o=eval("("+o5+")");//使用()将"{}语句块"包含后,eval将它当做一个对象返回,而不再是{}语句块,注:var x=(3),正确
alert(o.name+"-"+o.age);
方法2:Function类
(1)常用
var foo01 = function()
{
var temp = 100;
this.temp = 200; //属于window对象
return temp + this.temp;
}
alert(typeof(foo01));
alert(foo01()); //不包含constructor
(2)了解function
var foo02 = new function()
{
var temp = 100;
this.temp = 200;
return temp + this.temp;
}
alert(typeof(foo02));
alert(foo02.constructor());
(3) 获取json
var s="{name:'Tom',age:20}";
var o=new Function("return "+s);
alert(o);//匿名函数
alert(o().name) //得到json值
* new Function(param),创建匿名函数,将参数作为函数体
方法3:native
支持IE8与FF3.1beta
var s = 'var temp = 100; this.temp = 200; return temp + this.temp;'
if(typeof JSON!="undefined")
{
JSON.parse(s);
}
else
{
alert('JSON no support');
}