Код `для-из` транспорта транспорта 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с. Я пробовал оба foreachfor-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, который всегда переносится в циклы массивов
Другие вопросы по тегам