js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用
2024-08-26 01:44:32
一,情况如下,这是成功代码:
$(function () {
$.ajax({
url: "Demo.aspx",
type: "post",
data: { Id: "" },
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": ""
};
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]
最新文章
- ExtJS 中类的继承
- kafka模块概述
- 解决ADB server didn't ACK问题,连上手机问题
- C#的lock关键字
- json和字符串/数组/集合的互相转换の神操作总结
- Beautiful People 分类: Brush Mode 2014-10-01 14:33 100人阅读 评论(0) 收藏
- HDOJ2001计算两点间的距离
- HDU 2554 N对数的排列问题
- android 中文件加密 解密 算法实战
- uva 620 Cellular Structure
- Linux学习 -- 常用命令
- 【测试编码URI的函数】
- 拷贝本地文件到docker容器
- iview select filterable属性使用下拉小bug
- django- Vue.js 操作
- GitHub存储库泄露了API令牌和加密密钥
- 比Kafka Mangaer更优秀的开源监控工具-Kafka Eagle
- mysql大表设计以及优化
- Java集合实现类区别与联系
- 关于适用base64对图片进行编码在服务器上性能的相关讨论