javascript eval和JSON之间的联系

时间:2024-04-19 10:00:51 

如果您想详细了解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函数将把最后一个表达式或者语句所包含的值或引用作为返回值。

举例说明

  • ev

    al评估JavaS

    cript表达式


var bar = 'bar';
var foobar = eval('"foo" + bar');
alert(foobar);

  • ev

    al评估JavaS

    cript语句


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解释成代码块。

举例说明

  • ev

    al错误解析语义


alert(eval('{foo:"bar"}'));   // return "bar", incorrect

  • ev

    al正确解析JSON


alert(eval('({"foo": "bar"})')); // return JSON object, correct

结论

理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。

following this format:


eval('{' + jsonString + ')');

标签:eval,JSON
0
投稿

猜你喜欢

  • Python和Bash结合在一起的方法

    2023-11-02 20:53:27
  • Python字典创建 遍历 添加等实用基础操作技巧

    2021-05-23 22:22:31
  • js控制div弹出层实现方法

    2023-10-15 05:53:28
  • MSSQL 生成日期列表代码

    2024-01-26 23:58:01
  • asp如何将RGB颜色转化成到16进制的?

    2009-11-26 20:41:00
  • Django使用HTTP协议向服务器传参方式小结

    2023-03-08 11:31:20
  • python openpyxl打开文件关闭问题

    2023-02-19 17:27:42
  • tensorflow 初始化未初始化的变量实例

    2021-05-16 13:47:54
  • MySQL单表查询常见操作实例总结

    2024-01-20 05:47:17
  • JS获取鼠标位置距浏览器窗口距离的方法示例

    2024-04-19 10:06:14
  • Python Json读写操作之JsonPath用法详解

    2022-09-20 04:18:48
  • python类参数self使用示例

    2023-05-27 17:15:18
  • Django执行python manage.py makemigrations报错的解决方案分享

    2021-05-23 06:58:05
  • 17个javascript自定义函数库

    2008-02-26 11:49:00
  • pandas 数据结构之Series的使用方法

    2022-08-13 15:56:39
  • Python项目 基于Scapy实现SYN泛洪攻击的方法

    2023-01-15 01:34:30
  • vue动态添加表单validateField验证功能实现

    2023-07-02 17:03:27
  • python排序算法之选择排序

    2023-03-15 11:56:56
  • Python定时执行程序问题(schedule)

    2021-07-26 14:18:22
  • Python合并Excel表(多sheet)的实现

    2023-08-06 21:59:11
  • asp之家 网络编程 m.aspxhome.com