您的位置:首页 > Web前端 > JavaScript

javascript基础知识系列:eval()

2012-08-09 11:39 381 查看
  在用ztree.js做商品分类树状显示时遇到了JSON数据转换的问题,发现可以用eval做处理,在网上找资料学习了下:

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

语法:

eval(string):    string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句

返回值

通过计算 string 得到的值(如果有的话)。

说明

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

在解析JSON格式的数据时:如果服务器返回的是JSON字符串,需要将JSON字符串转换成JSON对象

View Code

  var o={name:"张三", age:19}; //此处o是js对象 ,对象字面量
  alert(o.name);

  //此时的str_json才是json类型的字符串
  var str_json = '{"name":"张三", "age":19}'; //str_json是符合JSON规范的字符串
  var oJSON = eval('('+str_json+')'); //使用eval()把JSON字符串转化成js对象oJSON
  alert(oJSON.name); //张三



为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个

例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下

面两个执行结果是不同的:

  alert(eval("{}"); // return undefined
  alert(eval("({})");// return object[Object]


字符串转换成json的三种方式:

第一种:eval方式解析

function strToJson(str){
var json = eval('(' + str + ')');
return json;
}


第二种:new Function形式

function strToJson(str){
var json = (new Function("return " + str))();
return json;
}


第三种:使用全局的JSON对象

function strToJson(str){
return JSON.parse(str);
}


另外:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

var str = '{name:"jack"}';
var obj = JSON.parse(str); // --> parse error


name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: