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的理解与应用 #### `eval`函数的工作原理及应用场景 在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript...
本篇将聚焦于如何巧妙地使用`eval`函数来解析JSON对象,虽然在实际开发中,由于安全考虑我们通常会避免使用`eval`,但理解其工作原理对于学习JavaScript和JSON解析至关重要。 首先,JSON对象本质上是符合JSON语法的...
### JavaScript中eval解析JSON字符串详解 #### 一、前言 在JavaScript开发中,解析JSON字符串是一项常见的任务。其中一种方法是使用`eval()`函数。虽然这种方法并不推荐,但了解其工作原理及其潜在风险仍然非常...
本文将深入探讨JSON与JavaScript中的`eval()`函数的关系,并通过一个具体的示例来展示它们如何协同工作。 在JavaScript中,`eval()`函数是一个危险但强大的工具,它可以执行一个字符串作为JavaScript代码。在处理...
- `JSON.parse()`不会执行JavaScript代码,所以它比直接使用`eval()`更安全。 这个项目对于学习JavaScript深入理解数据结构、字符串操作以及递归处理有很好的实践价值。同时,它也能够帮助开发者更好地理解和掌握...
标题:“JavaScript的eval JSON object问题”所指的知识点主要包括以下几个方面: 1. AJAX技术及其数据交互:AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下,能够更新部分网页的...
由于JSON字符串不能直接在JavaScript环境中操作,所以通常会使用`eval()`来转换它: ```javascript let jsonString = '{"name": "John", "age": 30}'; let jsonObject = eval('(' + jsonString + ')'); console.log...
如果您想详细了解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解析JSON的知识点 #### 一、JSON简介与特点 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。相比于XML,JSON的数据格式更为简洁,...
由于JSON是JavaScript的一个子集,我们可以使用`eval()`快速地将JSON字符串转换为JavaScript对象,但这同样存在安全隐患。最佳实践是使用`JSON.parse()`函数,它被设计为安全地处理JSON字符串,并且速度较快: ```...
在JavaScript中解析JSON主要涉及两个核心函数:`JSON.parse()` 和 `eval()`。本文将深入讲解这两种方法以及相关的使用场景。 1. `JSON.parse()` `JSON.parse()` 是JavaScript内置的函数,用于将一个JSON字符串转换...
然而,当涉及到从服务器端获取JSON数据并将其转换为JavaScript对象时,`eval()`通常被用来解析这些数据。但是,这种方法存在一定的安全风险,因此在实际开发中,推荐使用更安全的JSON.parse()方法。 在描述中提到,...
`ToJson()`尝试使用`eval()`函数来解析JSON字符串,`eval()`在执行字符串作为JavaScript代码时,可以解析JSON。由于`eval()`存在安全风险,通常不推荐直接使用,但在不支持`JSON.parse()`的情况下,它可以作为一个...
实现通用型基于xmlhttp的ajax模型。...通过eval方法解译服务端回传的json格式数据。 服务端用asp编写,通过response.binaryRead()解译上传数据, 处理完成后,把数据格式化为jsString,该方法源于继承json2.0.
虽然不推荐,但在早期的 JavaScript 中,人们经常使用 `eval()` 函数来将 JSON 字符串转换成 JavaScript 对象。这种方法存在安全隐患,并且不被现代的最佳实践所推荐。 ```javascript function myEval() { var str...
- **安全性问题**: `eval()` 执行任何JavaScript代码,这意味着如果JSON数据来自不可信的来源,则可能会导致潜在的安全风险。 - **性能问题**: 虽然`eval()` 的执行速度相对较快,但其使用并不推荐,因为这可能导致...