javascript私房菜-百变函数eval
如你所想,确实有点标题党
手里有本鸟哥的<<linux私房菜>>对于一个linux菜鸟来说受益很大,所以我也来道私房菜,对鸟哥致敬!!
eval 很神秘,你不觉得吗? 你可能常常会用到这个函数,但是有不太明天它到底是干什么的,其实我之前也一样非常糊涂,所以写了这篇博和大家一起学习探讨.
很早一段时间我认为 eval 是个格式化函数,为什么这样认为,起因是ajax接收后台传过来的json格式字符串,javascript直接接收后台传入的json格式总是不识别,只要用神奇的 eval 函数转化一下就ok了,下面我们一起来认识一下 eval
eval
w3c 给出的定义是: eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码.
通俗一点理解就是:它试图去执行包含在字符串里的表达式或者一系列的合法的 JavaScript 语句
把字符串当做代码去执行听上去还是蛮有意思的. 我们验证一下.
var teststr="var p={};p.name='小小';p.age=1;alert(p.name+'的年龄是:'+p.age);"; eval(teststr);
执行结果:
teststr
对于这种应用场景还是很常见的,比如我在一个循环中要动态创建 参数,那么我完全可以拼接一个 定义变量的字符串,然后使用 eval 执行.
第二个应用场景就是ajax应用中,前端和后端服务器交互返回的json格式数据.
其实从后台传过来的是一个字符串,javascript也的确把它解析成了字符串,但是我们想要的是json格式.
神马是json? javascript中 对象的一种字面量表现形式,它需要严格的格式控制,比如 var persons=[{"name":"小小",age:1},{"name":"魔客",age:29}]; 如果一个对象直接用 {“name”:”aaa”,age:10} 即可.
上面的 persons 包括俩个字面量对象 小小 和 魔客.所以最外层使用 [ ] 括起来.
一般后台传过来的字符串往往是这样的 var data= ‘{“name”:”小小”,age:1},{“name”:”魔客”,age:29}’
所以eval转化字面量对象的时候用方括号或者圆括号括起来 var persons=eval(‘['+data+']‘); 或者 var persons=eval(‘(‘+data+’)');
为了验证一下,我们直接 alert( persons);
obj
可见经过 eval 转化已经变成了object 对象.