zoukankan      html  css  js  c++  java
  • eval()函数的特点和作用

    eval():

      作用:它的作用是把对应的字符串解析成js代码并运行(将json的字符串解析成为JSON对象);

      特点:它是一个全局函数;

      缺点:1>在该函数内部申明的变量都是全局变量,且申明的变量不会提升;

           2>耗性能,执行2次,一次解析成js语句,一次执行js代码;

      举例:

      1.对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,就是将字符串放到eval()函数中执行如下:

    已知服务器返回JSON字符串集合:

    var data="{

      student:[

        {name:'小明',age:17},

        {name:'小红',age:16},

        {name:'小鹏',age:18}

    ]

    }";

    var dataObj=eval("("+data+")");

    注意:这里在data外添加"("+**+")"是由于json是以"{}"的方式包裹的,js会将以"{}"包裹的代码当成语句处理,所以在调用该函数的时候需要先强制性转换一种表达方式,

    alert(eval("{}"); // return undefined;
    alert(eval("({})");// return object[Object];

    2..对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:

    alert(dataObj.root.length);//输出root的子对象数量 
    $.each(dataObj.student,fucntion(idx,item){ 
    if(idx==0){ 
    return true; 

    //输出每个student子对象的名称和值 
    alert("name:"+item.name+",age:"+item.age); 
    }) 
    注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。 

    $.getJSON("http://www.phpstudent.cn/",{param:"gaoyusi"},function(data){ 
    //此处返回的data已经是json对象 
    //以下其他操作同第一种情况 
    $.each(data.student,function(idx,item){ 
    if(idx==0){ 
    return true;//同countinue,返回false同break 

    alert("name:"+item.name+",age:"+item.age); 
    }); 
    }); 
    这里特别需要注意的是方式1中的eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。

  • 相关阅读:
    hadoop中的序列化
    web服务端的架构演变
    网易考拉规则引擎平台架构设计与实践
    spring分布式事务学习笔记(2)
    质量评估面面观--聊一聊软件上线前的质量评估
    用script标签加载
    Windows下命令行下启动ORACLE服务
    笔记本优化八项
    C#编程总结(一)序列化
    学习之路十四:客户端调用WCF服务的几种方法小议
  • 原文地址:https://www.cnblogs.com/gutianer/p/6917548.html
Copyright © 2011-2022 走看看