本文主要是介绍IE8下对象数组的长度问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题现象:web系统在IE8下左边的导航显示不出来,打开F12,报错如下:
定位和原因分析:
循环data(对象数组)时在IE8下和其他浏览器下的长度不一样,
比如var data = [{"name":"aaa"},{"name":"bbb"},{name:'ccc'},]
在IE8下length值为4,其他的则为3,原因是IE8遵循ECMAScript3的规则,当对象最后一个逗号后面没有内容时,也将最后一个空对象算在长度内,ECMAScript5则会忽略此对象。
所以出现上述问题的原因就是for循环到最后一个值为undefined,而undefined.属性 报错。
解决问题:
1.首先如果方便的话修改原data数据,保证数据中最后一项不出现逗号
2.如果数据已经和后台规约好,那么一种曲线救国的方式就是判断是否IE8及以下版本,如果是,length-1;
var DEFAULT_VERSION = "8.0";var ua = navigator.userAgent.toLowerCase();var isIE = ua.indexOf("msie")>-1;var safariVersion;if(isIE){safariVersion = ua.match(/msie ([\d.]+)/)[1];if(safariVersion <= DEFAULT_VERSION ){len = len -1;} }
这篇关于IE8下对象数组的长度问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!