日期:2014-05-16  浏览次数:20399 次

JavaScript 在 Firefox下正常IE下报错的几个例子

?

1. json 数据中多余的逗号

?

代码 var man={ name:'zhang', ? } 末尾多出一个逗号,

?

在 FireFox 下正常,

?

在 IE下会报错:缺少标识符、字符串或数字(Expected identifier, string or number )。

?

这样的错误在文件中不太好找,我用ultraedit 的正则表达式 " ,[ ^t ^p ]+} " 查找这样的错误 ,? 删除多余的逗号,即可

?

?

?

2. json 键值对的键侵犯了 IE 保留字 :

?

??? 定义一个 json : var? test = { export:'....' }? , 键为 export

?

在 FireFox 下正常,

?

在 IE下会报错:缺少标识符、字符串或数字(Expected identifier, string or number )。

?

修改为别的键值如 exportx 则没有问题,似乎 IE 有这样的关键字?是否还保留了别的呢?不得而知。但是类似这样的问题,在定义 json 时真得小心了,不能那么随心所欲。

?

可喜的是,根据西门兄弟的提示,给 json 名加上引号就没有后顾之忧了:

?

var test = { 'export' : '....'? }

?

?

?

?

参考:

?

Javascript保留字(Javascript Reserved Words)

?

?

?

?

?

?

3. 取 json 值时,报错“对象不支持此属性 方法 (object doesn't support this property or method)” :

?

?? 原代码是从 jqgrid 中读取行数据,然后处理

?

// 读取 jqgrid 行,返回的值是JSON :
//  {"rn":"1",...,"WorkType":"校准" }

var rowData = jqgrid_Samples_tab.getRowData( ids[i] ); 

cWorkType = rowData["WorkType"];

???? 运行到? WorkType = rowData["WorkType"]; 就报错。修改成 WorkType = rowData.WorkType也一样。

?

后来修改成 var WorkType = rowData["WorkType"]; 就可以了。再后来还发现,变量名和 JSON 键名不一样时,都不会报错,如 cWorkType = rowData["WorkType"] 也能正常运行。

?

?

???? 在 JavaScript 中,为变量定义加上一个 var 则限定变量为局部变量,否则就默认为全局变量。为了测试变量范围在 IE 中对 JSON 的影响,以及变量名与JSON键名同名的情况,单独做了一个测试程序,又没有发现类似的问题。

?

??? 是什么原因造成的这个错误呢 ? 以后在处理类似的问题时也得注意一下了,尽量不使用全局变量,或变量名不与JSON键同名。

?

?

?