如何将 JavaScript for-loop 转换为 CoffeeScript?

for (i = 0; i < 10; i++) {


doStuff();


}

这是我想转换成 CoffeeScript 的 JavaScript 代码。

59714 次浏览
doStuff() for i in [0 .. 9]

这在介绍页面上有解释: http://coffeescript.org/#loops

太平绅士编辑/更新:

确切的翻译是:

doStuff() for i in [0...10]

你需要小心“ . .”vs. .”,例如:

count = 0
doStuff() for i in [0..count] #still executes once!

所以你认为,没问题... 我会循环直到 count-1!

count = 0
doStuff() for i in [0..count-1] #executes twice!! '0' and then '-1'

直译:

for (var i = 0; i < someCount; ++i)
doStuff()

for i in [0...someCount]
doStuff()

标记的答案在功能上是正确的,但是生成的代码与原来的 javascript 不匹配。
正确的方法 (read,最接近下面的 javascript)

for (i = 0; i < 10; i++) {
doStuff();
}

doStuff() for i in [0..someCount] by 1 注意 for 循环中的 1

现在这段代码仍然会创建一个额外的 _i变量:

i=0
while i<=someCount
doStuff()
i++

以前的答案是有用的,但是,放弃 i对我来说更好:

for [0...10]
doStuff()

或者

doStuff() for [0...10]

其他解决方案增加了一个额外的迭代器变量 i,供您在循环内部使用,例如 doStuff(i),但是从 http://coffeescript.org/v1/#loops:

如果你不需要当前的迭代值,你可以省略它:

browser.closeCurrentTab() for [0...count]

具体来说,for i in [0...10]的翻译是 for (i = j = 0; j < 10; i = ++j),而 for [0...10]的翻译是 for (i = 0; i < 10; i++)

请注意其他评论中关于2点与3点的讨论([0..9][0...10])。