atitit.解决SyntaxError: missing ] after element list"不个object 挡成个str eval ....
1. 原因::: 不个object 挡成个str eval .....
1
这个只是ff错误,ie不错误..
1. 原因::: 不个object 挡成个str eval .....
别的可能原因::应该是缺少引号。
错误原因是在引用几个js插件的时候 文件冲突, 引用先后问题的原因..
通常出现在
执行到代码var json = eval("("+data+")");的是时候抛出如下的错误,
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. eval(string)
参数 |
描述 |
string |
必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。 |
2.1.1. 返回值
通过计算 string 得到的值(如果有的话)。
2.1.2. 说明
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。
不过实际上,ff的处理有问题了..不兼容....还是ie处理的好...
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:
var jsonObject = eval("(" + jsonFormat + ")");
3. eval和JSON 为什么要加括号?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
4. JSON格式的名字部分为什么要加引号?
因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。
举例说明
· eval错误解析语义
alert(eval('{foo:"bar"}')); // return "bar", incorrect
· eval正确解析JSON
alert(eval('({"foo": "bar"})')); // return JSON object, correct
5. Json的历史
然而另一方面,JSON是Douglas Crockford在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。
6. 参考
js 提示 missing ] after element list-CSDN论坛-CSDN.NET-中国最大的IT技术社区.htm
javascript eval和JSON之间的联系_javascript技巧_脚本之家.htm
数据格式的历史与对比:JSON vs XML - 51CTO.COM.htm