问题现象: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;
}
}