为什么要 eval 这里要添加 ('('+user+')') 呢?
来源:互联网 发布:枪匠遥感勘测数据 编辑:程序博客网 时间:2024/06/07 23:46
对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于 eval()中执行一次。这种方式也适合以普通 javascipt 方式获取 json 对象,以下举例说明:
var u = eval('('+user+')');
为什么要 eval 这里要添加 ('('+user+')') 呢?
原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为j avascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefinedalert(eval("({})");// return object[Object]
测试实例
var user = '{name:"张三",age:23,'+ 'address:{city:"青岛",zip:"266071"},'+ 'email:"iteacher@haiersoft.com.cn",'+ 'showInfo:function(){'+ 'document.write("姓名:"+this.name+"<br/>");'+ 'document.write("年龄:"+this.age+"<br/>");'+ 'document.write("地址:"+this.address.city+"<br/>");'+ 'document.write("邮编:"+this.address.zip+"<br/>");'+ 'document.write("E-mail:"+this.email+"<br/>");} }'; var u = eval('('+user+')'); u.showInfo();
对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于 eval()中执行一次。这种方式也适合以普通 javascipt 方式获取 json 对象,以下举例说明:
var u = eval('('+user+')');
为什么要 eval 这里要添加 ('('+user+')') 呢?
原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为j avascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefinedalert(eval("({})");// return object[Object]
测试实例
var user = '{name:"张三",age:23,'+ 'address:{city:"青岛",zip:"266071"},'+ 'email:"iteacher@haiersoft.com.cn",'+ 'showInfo:function(){'+ 'document.write("姓名:"+this.name+"<br/>");'+ 'document.write("年龄:"+this.age+"<br/>");'+ 'document.write("地址:"+this.address.city+"<br/>");'+ 'document.write("邮编:"+this.address.zip+"<br/>");'+ 'document.write("E-mail:"+this.email+"<br/>");} }'; var u = eval('('+user+')'); u.showInfo();
- 为什么要 eval 这里要添加 ('('+user+')') 呢?
- 为什么要 eval这里要添加 “("( "+data+")");
- 为什么要创建索引呢
- 为什么要写@Override呢?
- 为什么要中断线程呢?
- 为什么要开博客呢
- 为什么老是要审核呢
- 为什么要学习Java呢?
- 为什么要学习javaee呢?
- 为什么要使用Kotlin呢
- 为什么要在这里建博客
- 为什么总要抱怨忙呢
- 冬至为什么要吃饺子呢
- 为什么周六周日要上班呢...
- 为什么总是要考虑那么多呢!
- 愁啊~!积分~!为什么要积分呢~!
- 为什么你要骗我呢?
- 为什么下东西要积分呢
- 网页设计之页面滑动
- Oracle 找出需要回收高水位的表
- Redis集群及其中间遇到的坑
- [Usaco2011 Mar]Brownie Slicing
- Machine Learning 2014 by Andrew NG (part 3)
- 为什么要 eval 这里要添加 ('('+user+')') 呢?
- python语法
- Monkey测试总结
- JAVA对象流序列化时的readObject,writeObject,readResolve是怎么被调用的
- cmd命令提示符大全(干货)
- This application failed to start because it could not find or load the Qt platform plugin "windows"
- NSDictionary出现存储value不完整
- keras深度学习框架的训练保存及调用
- web前端常见安全问题