eval函数的工作原理
eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。
举例说明
eval评估JavaScript表达式
var bar = 'bar'; var foobar = eval('"foo" + bar'); alert(foobar);
eval评估JavaScript语句
var bar = 'bar'; // if variable bar equals 'bar', foobar is the result of // last executing statement: bar="foo-bar"; var foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'); alert(foobar);// change the valuebar = 'foo'; // now our the last executed statement is: bar = "bar-foo"; // therefore the value of variable foobar has been changed // into 'bar-foo' foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'); alert(foobar);
JSON的格式
JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。
举例说明
对象的字面量
var objectLiteral = { name: "Objector.L", age: "24", special: "JavaScript", sayName: function() { return this.name; } };
JSON对象
var jsonFormat = { "summary": "Blogs", "blogrolls": [ { "title": "Explore JavaScript", "link": "http://example.com/" }, { "title": "Explore JavaScript", "link": "http://example.com/" } ] };
eval和JSON
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:
var jsonObject = eval("(" + jsonFormat + ")");
为什么要加括号?
加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined alert(eval("({})");// return object[Object]
JSON格式的名字部分为什么要加引号?
因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。
举例说明
eval错误解析语义
alert(eval('{foo:"bar"}')); // return "bar", incorrect
eval正确解析JSON
alert(eval('({"foo": "bar"})')); // return JSON object, correct
结论
理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。
following this format: eval('{' + jsonString + ')');
相关推荐
javascript eval和JSON之间的联系
javascript中eval解析JSON字符串.docx
如果您想详细了解eval和JSON请参考以下链接: eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval JSON:http://www.json.org/ eval函数的工作原理 eval函数会评估一个...
我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...
在Javascript使用eval将接送转化为json对象 var jsonData = '{"persons":{"name":"成龙","age":58},{"name":"吴京","age":33},"name":"甄子丹","age":44}'; var jsonObj = eval('('+jsonData+')'); //访问...
通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。 ...
javascript接收处理json信息 ajax获得接口信息,javascript本身处理json信息; 通过eval()把接收的json字符串变成真实的对象信息。 提供的json接口数据01.php: <?php header("content-type:text/html;charset...
实现通用型基于xmlhttp的ajax模型。...通过eval方法解译服务端回传的json格式数据。 服务端用asp编写,通过response.binaryRead()解译上传数据, 处理完成后,把数据格式化为jsString,该方法源于继承json2.0.
本文实例讲述了javascript中JSON.parse()与eval()解析json的区别。分享给大家供大家参考,具体如下: JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的...
文件实施JSON编码器/解码器JavaScript.JSON成为一个内置的JavaScript功能时的ECMAScript ProgrammingLanguage的标准 - 由ECMA总Assemblyin的2009年12月采用第五版。在这个集合中的大多数文件都为applicationsthat的...
本文实例讲述了javascript中JSON对象与JSON字符串相互转换实现方法。分享给大家供大家参考。具体如下: [removed] // 根据JSON对象的属性的名称获取属性的值 var jsonObj = { name: "jxqlovejava" }; // JSON对象 ...
本文实例讲述了JavaScript解析JSON格式数据的方法。分享给大家供大家参考,具体如下: 1、使用JavaScript提供的eval()函数 function JsonText1() { var strJSON = "{'Name':'Kevin','Age':'23'}"; //得到...
javascript巧用eval函数组装表单输入项为json对象的方法.docx
NULL 博文链接:https://liminhappygirl.iteye.com/blog/1277249
主要介绍了javascript巧用eval函数组装表单输入项为json对象的方法,实例分析了JavaScript使用eval函数动态构造json对象的相关技巧,需要的朋友可以参考下