<script type="text/javascript">
var a = function(msg){ //1
var datas = eval(msg);
alert(datas.success);
//2
var datas = eval("(" + msg + ")");
alert(datas.success); //3
eval("datas=" + msg);
alert(datas.success);
};a("{success:true}");</script>三个alert,打印的结果为什么不同??这三段js有什么不同,第二端,为什么,要加小括号,奇怪,请高手指教???

解决方案 »

  1.   

    eval不能够解析字符串对象,只能解析原始字符串
      

  2.   

    eval函数的参数是字符串。
    该函数会将参数中的字符串当做javascript代码来运行。
      

  3.   

    我是这样理解的:eval  参数是一个js 表达式表达式: 变量+运算符
      

  4.   

    <script type="text/javascript">
        var a = function(msg){        //1
            var datas = eval(msg);
            //将字符串转换成js对象,如果字符串中有特殊的符合;如换行什么的可能无法转换成功
            alert(datas.success);
            //2
            var datas = eval("(" + msg + ")");
           //这里加括号可以转换带换行等特殊字符的字符串
            alert(datas.success);        //3
            eval("datas=" + msg);
            //这里其实少了个var ,eval("var datas=" + msg);和上面的基本一样,就是直接转换成js变量
            alert(datas.success);
        };a("{success:true}");</script>
      

  5.   


    第二个,我还是不是很明白,就算他  转换成  带换行等特殊字符的字符串,那也不代表他就是Json对象哦??是不,请赐教!!
      

  6.   

    先运行下,然后把上面的注释掉,打开下面的看看
    注意中间的\n
     var a = function(msg){
            //2
            var datas = eval("(" + msg + ")");
    //var datas = eval(msg);
           //这里加括号可以转换带换行等特殊字符的字符串
            alert(datas.success);       
        };a("{success:'hello world',\n error:'error'}");
      

  7.   

    顶一下了({success:true})这个会不是自执行对象