2017-09-06 42 views
0

我有一些ES6代碼在我反應過來的項目是這樣的:的代碼`換of` circlation運輸由巴貝爾不支持某些瀏覽器

``` javascript 
for (const v of [0, 1, 2,]) { /* doSth*/ } 
``` 

,它的傳輸後能很好地ES5每一個地方。 但是,如果我改變他們喜歡那些:

``` javascript 
const arr = [0, 1, 2,]; 
for (const v of arr) { /* doSth*/ } 
``` 

那麼它拋出一個錯誤,在iPhone 5C ReferenceError: Can't find variable: Symbol。 我試過foreachfor-in和純粹的for發行量,它們在舊設備中都運行良好。 但是,我需要做一些像async() => { for (...) { await doSthAysnc; } },它不能使用foreach。 更何況,for-of是非常危險的,純粹for是非常醜陋的。所以如果可能的話,我更喜歡使用for-of。 謝謝。

@Bergi嗯,這是它transpiles到代碼: 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("================================================================"),

+0

請向我們展示它* transpiles *。 – Bergi

+0

我想要,但通過構建的代碼很難找到它們。 –

+0

啊,再生器:-)您可能已經放棄縮小步驟以使調試更容易,但我認爲我發現問題仍然 – Bergi

回答

0

使用文字直接在for … of數組使一個extra transpiler optimisation,導致它不使用iterables。在默認原因中,它將嘗試查找在傳統環境中失敗的m[Symbol.iterable]方法。

在可以看到三種解決方案:

+0

這很有幫助,謝謝。 –

+0

@正逍遙0716然後你可能想[upvote和/或接受答案](https://stackoverflow.com/help/someone-answers)。很高興有幫助! – Bergi