2015-06-20 31 views
8

我無法理解這段代碼:打字稿/ JavaScript的調用的forEach

stringsArray.forEach(s => { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 
特別

,該s => { ...部分是神祕的。看起來s正被分配給每個循環中數組中的下一個字符串。但=>部分的含義是什麼?這與我認爲的lambda有關,但我沒有遵循。

回答

12

沒錯這就是一個lambda(例如,類似於ECMAScript6和Ruby,以及一些其他語言。)

Array.prototype.forEach有三個參數,element, index, array,所以s只是被用於element參數名稱。

它會像常規ECMAScript5寫這篇:

stringsArray.forEach(function(s) { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 

在上面的例子中,你並沒有顯示整個代碼,所以我想validators只是一個普通的對象{}

您給出的示例的語法實際上與ES6語法相同。

看看這個例子從the TypeScript handbook

example

+0

謝謝...還是有點糊塗了......請注意,我在Ruby,但不是在JS相當精通。我正在學習TS,因爲它對我來說似乎是更堅實的基礎......是「s => {}」將lambda作爲第一個參數傳遞給for_each?如果是這樣,那麼在lambda本身又如何出現?這就是我被困住的地方(現在)。謝謝! – pitosalas

+1

@pitosalas,TypeScript在JavaScript之上結冰。我認爲首先學習TypeScript可能不是個好主意,而不是相反。您是否閱讀過'.forEach'的文檔? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach –

+1

以及我知道一些js(我正在閱讀雄辯的js),所以除了這裏的一些技巧外我感覺很舒服。但我會遵循你指向的鏈接並研究它。謝謝。 – pitosalas