运行for循环时,coffeescript哪个更好/更有效?

时间:2011-09-24 10:58:46

标签: javascript loops coffeescript

在javascript中编写以下函数有两种功能相同的方法,哪种更好或更有效,为什么?

(str) ->
  s = 0
  for i in [0...str.length]
    s += str.charCodeAt i 
  s

(str) ->
  s = 0
  for i in str
    s += i.charCodeAt 0 
  s

除此之外:你能否建议其他方法呢?

编辑:根据JSPerf,第一个更快:http://jsperf.com/coffee-for-loop-speed-test - 这是为什么?

2 个答案:

答案 0 :(得分:5)

第一个更优雅,更高效。第二个字符串在转换为charCode之前,不必要地将字符串的每个字符复制到一个单独的字符串。

答案 1 :(得分:1)

您熟悉functional programming吗? Coffeescript + Underscore.js一起工作非常棒。您可以使用ECMAScript 5上定义的本机Array#reduce或下划线功能。第一个例子:

(s.charCodeAt(0) for s in "hello").reduce((acc, x) -> acc + x) # 532