记录兼容IE8中发现的一些问题
一.new Date().getYear();
chrome下:获取的是1900年之后的年份,如2017年获取的是117
IE8下:获取的是公元年份,如2017获取的是2017
解决方案:使用new Date().getFullYear();,统一获取公元年份,如2017获取的是2017
二.parseInt()
parseInt在解析开头为0的数字,如"09"时
chrome下:默认作为10进制处理,09解析为9
IE8下:开头为0,作为8进制处理,09解析为1
解决方案:
1.parseInt(new Number("09"))转换为Number类型,默认是10进制的
2.parseInt("09"-0),通过-0的方式强制转换为Number类型,本质和方法1相同
3.parseInt("09",10),指定使用10进制解析
三.for(var i in Array)
for-in语法循环时,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包含原型中的属性,
如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异
chrome下:没有问题
IE8下:IE8下没有__proto__属性,所以对原型链的支持有问题,同时也存在屏蔽不可枚举属性的实例属性的问题。结果就是会导致多循环或少循环。
解决方案:
采用for-loop,即for(var i = 0; i < Array.length; i++)