for (i = 0; i < 10; i++) {
doStuff();
}
那就是我想要转换为CoffeeScript的JavaScript代码。
Answers:
doStuff() for i in [0 .. 9]
简介页面对此进行了说明:http : //coffeescript.org/#loops
JP编辑/更新:
确切的翻译是:
doStuff() for i in [0...10]
您需要小心使用“ ..”和“ ...”,例如:
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()
for i in [0...10]
。两个点(..
)表示“不超过”,而三个点(...
)表示“不超过但不包括”。这是一种红宝石主义。
标记的答案在功能上是正确的,但生成的代码与原始javascript不匹配。
正确的方法(请阅读最接近以下javascript的方法)
for (i = 0; i < 10; i++) {
doStuff();
}
是doStuff() for i in [0..someCount] by 1
注意for循环上的by 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]
vs. [0...10]
)的讨论。