javascript eval和JSON之间的关系
eval函数的工作原理
eval函数会评估一个给定的含有javascript代码的字符串,并且视图去执行包含在字符串里的表达式或者
一系列的合法的javascript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。
console.info(eval("alert('a');alert('b')")) console.info(eval("x=10;y=20;alert(x*y)")); //200 console.info(eval("3+6")); //9
JSON格式
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理 解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
{ "acceptIs": null, "entity": null, "refuseIs": null, "result": { "pageSize": 10, "resultList": [ { "SHNOTE": "法拉利F40", "STATE": "提交", "CTIME": "2013/12/31 13:53:28", "PHONE": "13111050937", "ID": "40288ba54347286501434736c6c60000", }, ], "totalPage": 1, "totalSize": 4 } }
eval和JSON
利用eval函数可以将JSON数据转化为可用的javascript对象。
var datas=eval("("+data+")");
为什么要加括号?
加上圆括号的目的是使eval函数在评估javascript代码的时候强制将括号内的表达式转化为对象,
而不是作为语句来执行。例如对象{},如若不加外层的括号,那么eval会将大括号识别为javascript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。如下:
console.info(eval("{}")); //undefined console.info(eval("({})")); //Object {}
涉及项目代码:
$(document).ready(function(){ $.post('/homea/admin/UserBookView.do', {}, function(data) { var datas=eval("("+data+")"); for(var i=0;i<datas.result.resultList.length;i++){ var id = datas.result.resultList[i]['ID']; var ctime = datas.result.resultList[i]['CTIME']; var state = datas.result.resultList[i]['STATE']; console.info(id+" "+ctime+" "+state); } }); })