2015-06-20 71 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