记录兼容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++)

posted @ 2017-09-23 11:31  桔子在路上  阅读(316)  评论(0编辑  收藏  举报