eval(data)和eval("("+data+")")的区别

如果data是字符串,使用eval("("+data+")")可以将其转换为json对象,和JSON.parse的功能一样。
如果data是json对象,使用eval("("+data+")")会报错,正如你描述的错误。eval一个json对象,没有什么作用,这个时候不需要使用eval方法,直接用data即可。

所以,如果你那边能确定后台返回的是字符串,就使用eval("("+data+")")(eval会带来很多问题,不建议使用,如果想实现转化用JSON.parse更好),如果后台返回的是json对象,什么操作都不需要,直接使用data即可。如果你是用的jquery, 将type(一般为这个配置属性)设为json,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可

另外多说一点
为什么eval要添加括号呢?

原因:eval本身的问题。由于json是以{}的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。

console.log(eval("{}"); // undefined

console.log(eval("({})");// object[Object]

转……

文章来源:刘俊涛的博客

地址:http://www.cnblogs.com/lovebing

原文地址:https://www.cnblogs.com/wangyongx/p/12322973.html

时间: 2024-10-01 00:37:31

eval(data)和eval("("+data+")")的区别的相关文章

Eval与DataBinder.Eval的区别

DataBinder.Eval的基本格式 DataBinder.Eval(Container.DataItem,"XXX","{0}") <%# DataBinder.Eval(Container.DataItem,"xxxx")%>或者<%# DataBinder.Eval(Container,"DataItem.xxxx")%> 还有一种据说微软说效率很高的方式 <%# ((DataRowVi

一些数据格式化-Eval( &quot; &quot;)和DataBinder.Eval(Container.DataItem, &quot; &quot;)的区别及用法

ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(fieldname).Eval方法与DataBinder.Eval一样可以接受一个可选的格式化字符串参数.缩短的Eval语法与DataBinder.Eval的不同点在于,Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段,而DataBinder.Eval需要使用参数来

两种Data Table参数化设置的区别

首先介绍Data Table的语法: 1.DataTable.value(ParameterID, SheetID) 2.DataTable(ParameterID, SheetID) 以上2种方法的效果是一样的. 使用例子: WebEdit("关键字输入框").Set DataTable.Value("列名",“表名”) 然后比较Global Sheet和Local Sheet 1.Global Sheet:是一个全局变量,有几行数据,程序就要回放几次. 它受Da

eval与window.eval的差别

eval与window.eval的差别 它们之间有区别吗? 开发过程中似乎很少有人去加个额外的window,觉得多此一举.比如Ajax过程中回调函数解析JSON格式字符串 1 ... 2 function callback(str){ 3 var json = eval('(' + str + ')'); 4 } 5 ... 但由于各个引擎实现差异,它们的区别还是有的.通常直接使用eval,而非var json = window.eval('(' + str + ')');又比如调试时使用ale

Datasets for Data Mining and Data Science

From kdnuggets Data repositories AWS (Amazon Web Services) Public Data Sets, provides a centralized repository of public data sets that can be seamlessly integrated into AWS cloud-based applications. BigML big list of public data sources. Bioassay da

ELK之kibana的web报错[request] Data too large, data for [&lt;agg [2]&gt;] would be larger than limit of

ELK架构:elasticsearch+kibana+filebeat 版本信息: elasticsearch 5.2.1 kibana 5.2.1 filebeat 6.0.0 (预览版) 今天在进行ELK测试的时候,在kibana上面discover无论那个index,发现均会报错: [request] Data too large, data for [<agg [2]>] would be larger than limit of 并且在elasticsearch的日志可以看到: or

Big Data Analytics and Data Mining 第一天.

今天是上课的第一天.真心很感激导师能让我出来学习.今天突然觉得自己要好好学习英语.并不是上课的时候我看不懂裴教授的课件.而是觉得如果英语不好就很像乡巴佬那样,很难接触到高级的东西. 通过今天的听讲,我感觉对数据挖掘的理解更深刻些. 以前总觉得自己研究生的目标是要好好学习算法,好好学习相关的技术. 现在觉得除了要好好学习算法外,我也期待自己能做出一些研究. 记录下今天讲课的内容. 今天我觉得主要讲了三部分: 1,数据挖掘相关的概念及相关的学术期刊. 从广义上来定义数据挖掘:The art of d

初探 spring data(一)--- spring data 概述

由于自己一个项目要用多到Sql与NoSql两种截然不同的数据结构,但在编程上我希望统一接口API,让不同类型的数据库能在相同的编程接口模式下运作.于是找了一个spring的官网,发现一个spring data的项目.Spring Data 统一所有访问数据库的接口,为开发者提供一个更加简便的开发方式  Spring Data 官网 下面是几个核心的项目介绍 Spring Data Commons - 每个Spring Data 项目的核心基础 (因此每一个Spring Data项目都使用统一的接

SQL data reader reading data performance test

/*Author: Jiangong SUN*/ As I've manipulated a lot of data using SQL data reader in recent project. And people says it's not good to access the data by column name. So I've made an performance test in reading data from SQL data reader. Firstly, I've

this, eval(&#39;this&#39;), (0, eval)(&#39;this&#39;))

今天又被一段javascript代码神奇到了 function test() { console.log(this, eval('this'), (0, eval)('this')); }; var a = {}; test.apply(a); 在现代浏览器的console里跑上边的代码,结果应该类似是下边这样 Object {} Object {} Window {top: Window, window: Window, location: Location, external: Object