天天看点

IE8及其以下版本会有哪些兼容性问题不支持console不支持trim() 等函数,不支持Map等对象,不支持 等元素对标识符敏感,语法要求严格for in 会比预期多循环一次

IE8及其以下版本会有哪些兼容性问题

  • 不支持console
  • 不支持trim() 等函数,不支持Map等对象,不支持 等元素
  • 对标识符敏感,语法要求严格
  • for in 会比预期多循环一次

不支持console

IE8及其以下版本下使用console会报错:console未定义。

需要自定义console函数,代码如下:

//解决ie浏览器console未定义的问题
window.console = window.console || (function () {
	var c = {};
	c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile
= c.clear = c.exception = c.trace = c.assert = function () { };
	return c;
})();
           

不支持trim() 等函数,不支持Map等对象,不支持 等元素

IE8及其以下版本下使用一些函数或对象会报错:对象不支持此属性或方法。

解决办法仍然是自己编写代码去实现想要的功能或者引入相关js文件。

对标识符敏感,语法要求严格

IE8及其以下版本对于语法要求特别严格,如果控制台报语法错误、缺少标识符、由于出现错误 xxx 而导致此项操作无法完成,请务必检查:

  1. 括号是否有多余或遗漏
  2. 是否有多余的标点符号,例如json对象最后的逗号多余:{a:‘1’, b:‘2’,}
  3. 注释是否规范
  4. js脚本加载顺序是否正确

for in 会比预期多循环一次

IE8及其以下版本使用循环for(var v in obj){}会比预期多循环一次,因为for-in循环是对对象每个属性(包括对象原型链的属性)的枚举,这会导致很多错误的发生。解决方法当然是使用其他形式的循环。

当然,IE还有很多兼容性问题,尤其IE8及其以下版本,如果大家还遇到其他兼容性问题,欢迎指出。