zoukankan      html  css  js  c++  java
  • javascript基础知识系列:eval()

      在用ztree.js做商品分类树状显示时遇到了JSON数据转换的问题,发现可以用eval做处理,在网上找资料学习了下:

    eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    语法:

    eval(string):    string    必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句

    返回值

    通过计算 string 得到的值(如果有的话)。

    说明

    该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

     

    在解析JSON格式的数据时:如果服务器返回的是JSON字符串,需要将JSON字符串转换成JSON对象

    View Code
      var o={name:"张三", age:19}; //此处o是js对象 ,对象字面量
      alert(o.name);
    
      //此时的str_json才是json类型的字符串
      var str_json = '{"name":"张三", "age":19}'; //str_json是符合JSON规范的字符串
      var oJSON = eval('('+str_json+')'); //使用eval()把JSON字符串转化成js对象oJSON
      alert(oJSON.name); //张三

    Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

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

    加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个

    例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下

    面两个执行结果是不同的:

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

    字符串转换成json的三种方式:

    第一种:eval方式解析

     function strToJson(str){  
          var json = eval('(' + str + ')');  
          return json;  
     } 


    第二种:new Function形式

    function strToJson(str){
        var json = (new Function("return " + str))();
        return json;
    }


    第三种:使用全局的JSON对象

    function strToJson(str){
        return JSON.parse(str);
    }


    另外:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

    var str = '{name:"jack"}';
    var obj = JSON.parse(str); // --> parse error


    name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题

  • 相关阅读:
    以用户名注册来分析三种Action获取数据的方式
    Struts2中的OGNL详解 《转》
    Module 'null' not found异常解决办法
    struts标签<logic:iterate>的用法
    struts2的核心和工作原理 <转>
    jstl标签怎么实现分页中下一页
    forward 和redirect
    forward 和redirect的区别
    今天早上起来就想着要问问龙虎有圆通没
    昨天晚上回来弄了两个皮蛋吃
  • 原文地址:https://www.cnblogs.com/colorstory/p/2629898.html
Copyright © 2011-2022 走看看