//PrintWriter out = response.getWriter();
        //out.print("{name:'Michael',email:'[email protected]'}");
        //out.close();
   上面的3行代码是我在servlet的demo中响应ajax请求写的        var temp=xmlhttp.responseText;
//alert(temp)的结果是:{name:'Michael',email:'[email protected]'}
        eval("data = "+temp);
        alert("name="+data.name);
        alert("email="+data.email);
        xmlhttp.close;
        /*
         define = "{name:'Michael',email:'[email protected]'}";
         eval("data = "+define);
          alert("define typeof:"+typeof(define));
          alert("data typeof:"+typeof(data));
         alert("name:"+data.name);
         alert("email:"+data.email);
        */
注释掉的是正确例子的代码,其中eval("data = "+define)这句创建了一个data对象,而我的同样代码不行打印出来还是string不是object。
帮我看下 我的代码错在哪里,是不是因为少了前后两个分号,js里面字符串转成Object是怎么做的

解决方案 »

  1.   

    var define = "{name:'Michael',email:'[email protected]'}";
    var data = eval('(' + define + ')');
    alert(data.name);
      

  2.   

    我也不知道。。
    json.js里就是这么写的。
    可能跟解释方式有关系吧。。
      

  3.   

    用eval是没有错的 
    上面也没有看出差别来
      

  4.   

    知道了那个
    var data = eval("{}");
    alert(data);
    var data = eval("({})");
    alert(data);
    你测试下就知道了。。第一个eval直接把{}执行了没有返回值,第二个则是执行并且返回了值
    也就是说。。加()能返回值
    (function () {
    alert("wc");
    })();
    和这个的道理是一样的。。
    这个就是返回了那个匿名的func,然后在执行它。
      

  5.   

    测试它执行了的依据是。。
    var num = 1;
    var data = eval("{n : num ++}");
    alert(num);
    var num = 1
    var data = eval("({n : num ++})");
    alert(num);
      

  6.   

    了解了吧。。我敬爱的LZ大人。
    ^o^
    快升星星了期待早日结贴谢谢~~
      

  7.   

    昏迷中。好混乱
    var xmlhttp.responseText="{name:'Michael',email:'[email protected]'}";
    var temp="("+xmlhttp.responseText+")";      
    eval("data = " + temp);
    alert("name="+data.name);
    alert("email="+data.email);为什么temp是字符串 而data是对象类型了
      

  8.   

    //为什么temp是字符串 而data是对象类型了
    因为用eval函数处理过了
      

  9.   

    eval("data = " + temp);
    这个的意思是
    data = {name:'Michael',email:'[email protected]'}
    所以data自然是obj类型了如果你这样写的话就不必加()了即temp = xmlhttp.responseText;因为
    data = eval('(' + temp + ')');这样的东西涉及到返回所以才加那个()
      

  10.   

    hbhbhbhbhb1021(天外水火(我要多努力)) 
    //为什么temp是字符串 而data是对象类型了
    因为用eval函数处理过了三星帅哥 你这个回答好有魄力 -_-|| 
    但是............
      

  11.   

    因为加了()代表eval里执行的是解析object对象,而不加则代表是一段代码段