IE8遇到的坑
new Date()
当new Date()时,IE8与IE11产生的结果不同。
1 | //IE8,date1格式为‘2017年8月23日’。当将该参数传递到rest接口时,无法绑定到date类型 |
for(var i in obj)
IE8支持JS版本较低,Array.prototype中的函数无法使用。比如forEach、indexOf等。一般为了兼容,使在IE8下也可以使用这些函数,会重写Array.prototype,加上这些函数。
1 | if(!Array.prototype.forEach) { |
但是,对于对象原型的操作,是很危险的事情,严重会导致导致原型链断裂。不过这次讨论的不是这个问题。
当IE8解析for in 方法时,会将forEach等添加到prototype上的方法当做变量,一起循环。所以循环体里如果对变量进行了操作,会导致报错。
1 | for(var i in params) { |
解决方法:
在使用for..in时,使用 hasOwnProperty() 对变量进行判断:
1
2
3
4for(var i in params) {
if(params.hasOwnProperty(params[i]))
console.log(params[i].length);
}for循环的另一种写法:
1
2
3for(var i = 0; i < params.length; i++) {
console.log(params[i].length);
}使用框架封装好的接口,_.forEach,如果不想引入框架,可以自己写一个forEach函数。