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脚本)的,这样很容易会造成系统的安全问题。

  • 相关阅读:
    面试之Promise对象
    HTML和CSS复习
    Vue学习第三天之vuex的todo小项目。
    MEC如何打开主界面对话框类
    静态链表求(A-B)U(B-A)的集合
    线性表---链式存储(双向链表)
    线性表---链式存储(单链表)
    线性表--线性存储
    结构体数组应用举例
    分治法求最大子段和
  • 原文地址:https://www.cnblogs.com/zhangchuangye/p/6922680.html
Copyright © 2011-2022 走看看