JavaScript eval()函数
来源:互联网 发布:python 输出 编辑:程序博客网 时间:2024/06/09 19:34
eval的定义是eval()可以解释运行由JavaScript源代码组成的字符串,并产生一个值,eval()是全局函数。
eval()只有一个参数,如果传入的参数不是字符串,它直接返回这个参数。如果参数是字符串,它会把字符串当成JavaScript代码进行编译,如果编译失败则抛出一个语法错误异常。如果编译成功则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,如果最后一个表达式或语句没有值,则最终返回undefined。如果字符串抛出一个异常,这个异常将把该调用传递给eval()。
但是我们实际上的应用只是在前台对后台返回的数据进行解析。
此时有一个很重要的部分,对后台返回的json字符串解析转换为json数据格式的数据。如果直接对返回的数据不添加任何操作进行解析的话,我们来看看会出现什么情况:
var data = '{"restId":"111","restName":"name111"}';
eval(data);
结果: SyntaxError: missing ; before statement
解析:为什么呢,实际上此时eval()是把该字符串当成语句来解析,但是当成语句来解析出现逻辑错误,eval()解析字符串“{}”是把它当做语句来解析,如果编译成功返回最后一个表达式的值;如果是“(..)”,会强制转换成对象解析。
var data = '{restId="111";restName="name111";}';
eval(data); // name111
eval('({a:3})'); // Object { a=3}
所以说如果我们把json字符串转换成json数据格式,一般都是直接加上“()”当成对象解析;
eval('({"restId":"111","restName":"name111"})'); //Object { restId="111", restName="name111"}
如果返回的是数组字符串,是以eval()会直接编译,解析成数组
eval('[{"restId":"111","restName":"name111"},{"restId":"222","restName":"name222"}]');
//[Object { restId="111", restName="name111"}, Object { restId="222", restName="name222"}]
所以说,根据业务需求,我们可以自己定义返回的数据,在利用eval()进行解析。比如说现在我的需求是从后台获取一个串数据填充到select 的option中,这个时候数组就比较方便,我们完全可以返回字符串数组,前台解析成数组,在依次填充到select中。我们可以根据业务需求,灵活的返回数据,是json字符串还是数组字符串还是普通字符串。
参考: http://blog.csdn.net/u013361445/article/details/50032425
http://www.cnblogs.com/myjavawork/archive/2011/03/10/1979279.html
0 0
- eval()函数(javascript)
- JavaScript 中eval()函数
- JavaScript的eval()函数
- eval()函数(javascript)
- javascript【eval()函数】
- eval()函数(javascript)
- javascript eval函数
- JavaScript eval() 函数
- JavaScript eval() 函数
- javaScript eval()函数用法
- javascript中的eval函数
- JavaScript eval() 函数
- JavaScript eval函数
- JavaScript eval() 函数
- JavaScript eval() 函数
- Javascript中的eval函数
- javascript eval函数
- javascript eval()函数应用
- [Tools]Windows 7(64)系統下提取 deb 文件中的某个文件的一种方法
- JAVA GC新时代 老年代
- swift继承
- 概念:静态库/动态库/静态链接库/动态链接库
- 内部类
- JavaScript eval()函数
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
- iOS开发进阶之静态链接库
- android编译分析之10—config.mk
- ios 开发中 动态库 与静态库的区别
- Android启动其他应用的方式
- LeetCode 26_Remove Duplicates from Sorted Array
- Android 框架练成 教你打造高效的图片加载框架
- 有趣的Autolayout示例-Masonry实现