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
原创粉丝点击