javascript - 仅当使用箭头函数时 Internet Explorer 中的脚本错误
问题描述
我有一个包含箭头函数的函数。它在 Edge、Chrome、FireFox 中运行良好,但是当我尝试在 Internet Explorer 10 && 11 中运行它时,我会遇到语法错误。
有什么方法可以支持 Internet Explorer 或其他解决方法吗?
function range(start, end) {
return Array.from(Array(end - start + 1), (_, i) => i + start);
}
语法错误似乎在“=>”
解决方案
正如其他社区成员已经告知您,IE 浏览器不支持Array.From和 => Arrow 函数。
对于Array.From有一个polyfill可用。您可以尝试将其用于 IE 浏览器。
代码:
// Production steps of ECMA-262, Edition 6, 22.1.2.1
if (!Array.from) {
Array.from = (function () {
var symbolIterator;
try {
symbolIterator = Symbol.iterator
? Symbol.iterator
: 'Symbol(Symbol.iterator)';
} catch {
symbolIterator = 'Symbol(Symbol.iterator)';
}
var toStr = Object.prototype.toString;
var isCallable = function (fn) {
return (
typeof fn === 'function' ||
toStr.call(fn) === '[object Function]'
);
};
var toInteger = function (value) {
var number = Number(value);
if (isNaN(number)) return 0;
if (number === 0 || !isFinite(number)) return number;
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
};
var maxSafeInteger = Math.pow(2, 53) - 1;
var toLength = function (value) {
var len = toInteger(value);
return Math.min(Math.max(len, 0), maxSafeInteger);
};
var setGetItemHandler = function setGetItemHandler(isIterator, items) {
var iterator = isIterator && items[symbolIterator]();
return function getItem(k) {
return isIterator ? iterator.next() : items[k];
};
};
var getArray = function getArray(
T,
A,
len,
getItem,
isIterator,
mapFn
) {
// 16. Let k be 0.
var k = 0;
// 17. Repeat, while k < len… or while iterator is done (also steps a - h)
while (k < len || isIterator) {
var item = getItem(k);
var kValue = isIterator ? item.value : item;
if (isIterator && item.done) {
return A;
} else {
if (mapFn) {
A[k] =
typeof T === 'undefined'
? mapFn(kValue, k)
: mapFn.call(T, kValue, k);
} else {
A[k] = kValue;
}
}
k += 1;
}
if (isIterator) {
throw new TypeError(
'Array.from: provided arrayLike or iterator has length more then 2 ** 52 - 1'
);
} else {
A.length = len;
}
return A;
};
// The length property of the from method is 1.
return function from(arrayLikeOrIterator /*, mapFn, thisArg */) {
// 1. Let C be the this value.
var C = this;
// 2. Let items be ToObject(arrayLikeOrIterator).
var items = Object(arrayLikeOrIterator);
var isIterator = isCallable(items[symbolIterator]);
// 3. ReturnIfAbrupt(items).
if (arrayLikeOrIterator == null && !isIterator) {
throw new TypeError(
'Array.from requires an array-like object or iterator - not null or undefined'
);
}
// 4. If mapfn is undefined, then let mapping be false.
var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
var T;
if (typeof mapFn !== 'undefined') {
// 5. else
// 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
if (!isCallable(mapFn)) {
throw new TypeError(
'Array.from: when provided, the second argument must be a function'
);
}
// 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (arguments.length > 2) {
T = arguments[2];
}
}
// 10. Let lenValue be Get(items, "length").
// 11. Let len be ToLength(lenValue).
var len = toLength(items.length);
// 13. If IsConstructor(C) is true, then
// 13. a. Let A be the result of calling the [[Construct]] internal method
// of C with an argument list containing the single item len.
// 14. a. Else, Let A be ArrayCreate(len).
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
return getArray(
T,
A,
len,
setGetItemHandler(isIterator, items),
isIterator,
mapFn
);
};
})();
}
对于 =>箭头函数,我建议尝试使用Babel.js将您的 ES6 代码转换为 Es5 代码。之后,它将与 IE 浏览器一起使用。
推荐阅读
- postgresql - psql:无法连接到服务器:
- javascript - 是否可以使用 2 个 Date 对象以标准的日/月/年格式(不是 MS)之一来确定年龄?
- sql - 如何将 excel 索引匹配转换为 Access - 加入 4 个表
- python - 具有最小组的 Python DummyRegressor
- python - Tensorflow 我不明白 model.fit 的输入应该是什么
- python - 在导入到 Django 之前将值更改为小写
- python - 如何从
没有在这个结构中得到不必要的部分?
- cassandra - 如何控制cassandra服务器中子进程的数量
- parsing - 如何用 CasperJS 注入 JS?
- python - 不使用 NumPy 的 Python 中的指数图