zoukankan      html  css  js  c++  java
  • js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用

    一,情况如下,这是成功代码:

           $(function () {
                $.ajax({
                    url: "Demo.aspx",
                    type: "post",
                    data: { Id: "1" },
                    success: function (data) {
                        var obj1 = eval("(" + data + ")");
                        alert(obj1[0].ProductClass_ID);
                    }
                });
            })

    然而如果将var obj1 = eval("(" + data + ")");,改为 var obj1 = eval(data);,就是出现弹出undefined,这是什么原因呢?

    二,但是在HTML定义的却毫无问题,代码如下:

          $(function () {
                var person = {
                    "name": "Nicholas",
                    "age": "29"
                };
                var obj = eval(person);
                alert(obj.name);
            }) 

    三,经过百度发现:

    原因在于:

    1,eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
    2,加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。

    那上面这两句话怎么理解?

    四,经过用调试,发现如图

    1,在HTML页面定义的数据

    2,经过异步返回的数据

    由上面数据的对比得出结论:

    1,在HTML页面写的定义的数据本身就是属于一个object对象

    2,在异步之后的数据是语句(statement),而如果执行这个就会出现undefined错误,所以我们需要将括号内的强制转化为对象执行,就是以上这句话var obj1 = eval("(" + data + ")");

    3,和这两句例子一样

    alert(eval("{}")); // 放回undefined

    alert(eval("({})")); //返回 object[Object]

  • 相关阅读:
    《老男孩》
    java中四种阶乘的计算
    DataOutputStream的乱码问题
    java中飞clone方法
    类反射的简单例子
    PHP: 如何连接oracle数据库进行数据读取
    .NET : 如何读取图片中的元数据信息
    重新审视REST
    PHP 的历史
    Image File Format Specifications {转载}
  • 原文地址:https://www.cnblogs.com/May-day/p/6124848.html
Copyright © 2011-2022 走看看