Код `для-из` транспорта транспорта babel не поддерживает какой-либо браузер
У меня было несколько кодов es6 в моем реактивном проекте:
``` javascript
for (const v of [0, 1, 2,]) { /* doSth*/ }
```
и он хорошо работает после транспортировки на ES5 в любом месте. однако, если я изменю их так:
``` javascript
const arr = [0, 1, 2,];
for (const v of arr) { /* doSth*/ }
```
то выдает ошибку, ReferenceError: Can't find variable: Symbol
в айфоне 5с. Я пробовал оба foreach
for-in
и чистый for
циркуляция, они все хорошо работают в этом старом устройстве. Но мне нужно сделать что-то вроде async () => { for (...) { await doSthAysnc; } }
и не может использовать foreach
, Более того, for-of
был очень опасным и чистым for
очень некрасиво поэтому, если возможно, я предпочитаю использовать for-of
, Благодарю.
@ Берги Ну, это коды, которые он передает: javascript
("================================================================"),m=["a","b","c"],e.prev=38,v=c.a.mark(function e(n){return c.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,new Promise(function(e){return setTimeout(function(){return e(n)},1e3)});case 2:case"end":return e.stop()}},e,t)}),y=!0,b=!1,w=void 0,e.prev=43,_=m[Symbol.iterator]();case 45:if(y=(x=_.next()).done){e.next=51;break}return E=x.value,e.delegateYield(v(E),"t2",48);case 48:y=!0,e.next=45;break;case 51:e.next=57;break;case 53:e.prev=53,e.t3=e.catch(43),b=!0,w=e.t3;case 57:e.prev=57,e.prev=58,!y&&_.return&&_.return();case 60:if(e.prev=60,!b){e.next=63;break}throw w;case 63:return e.finish(60);case 64:return e.finish(57);case 65:e.next=69;break;case 67:e.prev=67,e.t4=e.catch(38);case 69:console.log("================================================================"),
1 ответ
Использование литерала массива непосредственно внутри for … of
обеспечивает дополнительную оптимизацию транспилятора, которая не позволяет использовать итерации. По умолчанию он попытается найти m[Symbol.iterable]
метод, который терпит неудачу в устаревших средах.
Можно увидеть три решения:
- Импортировать
babel-polyfill
включить символы и итераторы - Используйте свободный режим, который, мы надеемся, всегда использует путь к массиву
- Использовать
transform-for-of-as-array
вместо этого плагин babel, который всегда переносится в циклы массивов