IE10 报错:缺少‘;’、xxx未定义的处理,配置babel文件
对于第一次遇到这些问题的朋友,可能真的会去看看是不是哪里忘了加入‘;’符号,但其实这些报错大都是因为
IE10-的环境不支持ES6语法,对于部分错误我们可以切换IE11环境来判断是否为ES6语法的问题

遇到这些问题的直接的解决方法是将ES6语法改为ES5
比如:
1.关键字
let、const 要改为 var //注意作用域是否正确
2.箭头函数
// 转码前 input.map(item=>item+1) // 转码后 input.map(function (item){ return item+1; });
3.xxx 方法/对象未定义(明明该方法或对象是存在的却还是报该错误,这种情况可以考虑重写xxx方法/对象,以map()、Set()为例)
// 重写map方法,解决ie10及以下模式不兼容map对象和Set对象
function isIE() { //ie?
if (!!window.ActiveXObject || "ActiveXObject" in window)
return true;
else
return false;
}
//如果是 ie 则添加 Map 与 Set类
if(isIE()){
//实现Map
function Map(){
this.elements = new Array();
//获取Map元素个数
this.size = function() {
return this.elements.length;
},
//判断Map是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
},
//删除Map所有元素
this.clear = function() {
this.elements = new Array();
},
//向Map中增加元素(key, value)
this.put = function(_key, _value) {
if (this.containsKey(_key) == true) {
if(this.containsValue(_value)){
if(this.remove(_key) == true){
this.elements.push( {
key : _key,
value : _value
});
}
}else{
this.elements.push( {
key : _key,
value : _value
});
}
} else {
this.elements.push( {
key : _key,
value : _value
});
}
},
//删除指定key的元素,成功返回true,失败返回false
this.remove = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key){
this.elements.splice(i, 1);
return true;
}
}
}catch(e){
bln = false;
}
return bln;
},
//获取指定key的元素值value,失败返回null
this.get = function(_key) {
try{
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
return this.elements[i].value;
}
}
}catch(e) {
return null;
}
},
//获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length){
return null;
}
return this.elements[_index];
},
//判断Map中是否含有指定key的元素
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key){
bln = true;
}
}
}catch(e) {
bln = false;
}
return bln;
},
//判断Map中是否含有指定value的元素
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value){
bln = true;
}
}
}catch(e) {
bln = false;
}
return bln;
};
// 重写forEach方法
this.forEach = function forEach(callback, context) {
context = context || window;
//IE6-8下自己编写回调函数执行的逻辑
var newAry = new Array();
for (var i = 0; i < this.elements.length; i++) {
if (typeof callback === 'function') {
var val = callback.call(context, this.elements[i].value, this.elements[i].key, this.elements);
newAry.push(this.elements[i].value);
}
}
return newAry;
};
//获取Map中所有key的数组(array)
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
};
//获取Map中所有value的数组(array)
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
};
};
// 实现Set
function Set() {
var items = {};
this.size = 0;
// 实现has方法
// has(val)方法
this.has = function(val) {
// 对象都有hasOwnProperty方法,判断是否拥有特定属性
return items.hasOwnProperty(val);
};
// 实现add
this.add = function(val) {
if (!this.has(val)) {
items[val] = val;
this.size++; // 累加集合成员数量
return true;
}
return false;
};
// delete(val)方法
this.delete = function(val) {
if (this.has(val)) {
delete items[val]; // 将items对象上的属性删掉
this.size--;
return true;
}
return false;
};
// clear方法
this.clear = function() {
items = {}; // 直接将集合赋一个空对象即可
this.size = 0;
};
// keys()方法
this.keys = function() {
return Object.keys(items); // 返回遍历集合的所有键名的数组
};
// values()方法
this.values = function() {
return Object.values(items); // 返回遍历集合的所有键值的数组
};
// forEach(fn, context)方法
this.forEach = function(fn, context) {
for (var i = 0; i < this.size; i++) {
var item = Object.keys(items)[i];
fn.call(context, item, item, items);
}
};
// 并集
this.union = function (other) {
var union = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
union.add(values[i]);
}
values = other.values(); // 将values重新赋值为新的集合
for (var i = 0; i < values.length; i++) {
union.add(values[i]);
}
return union;
};
// 交集
this.intersect = function (other) {
var intersect = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (other.has(values[i])) { // 查看是否也存在于other中
intersect.add(values[i]); // 存在的话就像intersect中添加元素
}
}
return intersect;
};
// 差集
this.difference = function (other) {
var difference = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (!other.has(values[i])) { // 将不存在于other集合中的添加到新的集合中
difference.add(values[i]);
}
}
return difference;
};
}
};
4.无法识别ES6的模板字符串的反引符号``,可以尝试转换为ES5的拼接方式:
//修改前 // template: `<span :class="['m-switch','m-switch-' + type, { active: booleanVal,'is-disabled': disabled,'is-small': small }] "@touchend.prevent="change" @mouseup.prevent="change"></span>`, //修改后 template: '<span :class="[\'m-switch\', \'m-switch-\' + type, {active: booleanVal, \'is-disabled\': disabled, \'is-small\': small}]" @touchend.prevent="change" @mouseup.prevent="change"></span>',
5.配置.babelrc
直接修改为ES5语法的操作是治标不治本的,要是报错的文件有几十个怎么办?一劳永逸的方法是在项目中配置.babelrc文件
Babel 是广为使用的 ES6 转码器,可以将 ES6 代码转化为 ES5 代码。
具体实现请看 antd的浏览器兼容性处理 案例。
本文来自博客园,作者:不如饲猪,转载请注明原文链接:https://www.cnblogs.com/ifeelthecall/p/15102178.html

浙公网安备 33010602011771号