对于json格式的字符串,在使用eval将字符串转换为json对象时需要注意在前后加上小括号。如下所示:
<script type="text/javascript"> var data = '{root:[{name:"1", value:"0"},{name:"6101", value:"北京"},{name:"6102", value:"天津"}]}'; var dataObj_1 = eval(data); var dataObj_2 = eval("(" + data + ")"); console.info(dataObj_1); console.info(dataObj_2); </script>该代码的运行结果如下:
图1:代码运行结果
之所以会出现如上的结果,是因为eval本身就可以解析并且运行字符串中的代码。由于json是以{}的方式来开始和结束的,在JS中,它会被当成是一个语句块来处理,所以想要不被当作语句块来处理,就必须强制性的将它转为一种表达式。加上圆括号的目的就是为了使函数在处理的时候强制将括号内的表达式转为对象,而不是作为语句来执行。
在项目上遇到了这个问题,在网上找到了这种解释,挺容易接受的,但是值得mark一下。