javascript eval和JSON之间的联系
如果您想详细了解eval和JSON请参考以下链接:
eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval
JSON:http://www.json.org/
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
在Javascript使用eval将接送转化为json对象 var jsonData = '{"persons":{"name":"成龙","age":58},{"name":"吴京","age":33},"name":"甄子丹","age":44}'; var jsonObj = eval('('+jsonData+')'); //访问...
我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...
通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。 ...
parse.js:该文件包含替代JSON的parse函数thatuses递归下降而不是eval.json_parse_state.js:此文件包含替代JSON的parse函数thatuses状态机器代替eval.cycle.js:这个文件包含了两个函数,JSON.decycle和JSON....
javascript巧用eval函数组装表单输入项为json对象的方法.docx
JSON (JavaScript Object Notation) 一种轻量级的数据交换格式,比 XML 更轻巧,JSON 是JavaScript 原生格式,这意味着 JavaScript 中处理 JSON 数据不需要任何 API 和工具包。
javascript接收处理json信息 ajax获得接口信息,javascript本身处理json信息; 通过eval()把接收的json字符串变成真实的对象信息。 提供的json接口数据01.php: <?php header("content-type:text/html;charset...
主要介绍了JavaScript数组、json对象、eval()函数用法,结合实例形式分析了JS数组创建、赋值、连接、翻转,json对象定义、读取,eval()函数的功能、使用等,需要的朋友可以参考下
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法...
主要介绍了javascript巧用eval函数组装表单输入项为json对象的方法,实例分析了JavaScript使用eval函数动态构造json对象的相关技巧,需要的朋友可以参考下
eval-json-path 评估/查询给定路径下json对象的值 通常,可以通过属性名称或索引来访问js对象变量。 该模块允许按字符串给出的路径/步骤进行访问 用法 const evalJsonPath = require ( 'eval-json-path' ) const ...
当2009年12月ECMA大会通过ECMAScript编程语言标准第五版时,JSON成为JavaScript的内置特性。 json2.js:该文件在全局对象中创建一个JSON属性(如果还没有的话),将其值设置为一个包含stringify的对象方法和解析方法。...
实现通用型基于xmlhttp的ajax模型。...通过eval方法解译服务端回传的json格式数据。 服务端用asp编写,通过response.binaryRead()解译上传数据, 处理完成后,把数据格式化为jsString,该方法源于继承json2.0.