Google analytics 转换谷歌&x27;Coffeescript的新通用跟踪代码

Google analytics 转换谷歌&x27;Coffeescript的新通用跟踪代码,google-analytics,coffeescript,Google Analytics,Coffeescript,我正在尝试将谷歌新的分析API与使用Coffeescript模块的应用程序集成。我想将他们的代码转换为Coffeescript,但是从js2coffee.org自动转换失败。我想手工重写,但有个逗号我不懂。原始JS代码: ( function (i,s,o,g,r,a,m){ i['GoogleAnalyticsObject']=r; i[r]=i[r] || function(){ (i[r].q=i[r].q||[]).push(arguments) }, // ----

我正在尝试将谷歌新的分析API与使用Coffeescript模块的应用程序集成。我想将他们的代码转换为Coffeescript,但是从js2coffee.org自动转换失败。我想手工重写,但有个逗号我不懂。原始JS代码:

( function (i,s,o,g,r,a,m){
  i['GoogleAnalyticsObject']=r;
  i[r]=i[r] || function(){
    (i[r].q=i[r].q||[]).push(arguments)
  }, // --------------------------------------- What is this comma?
  i[r].l=1*new Date();
  a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];
  a.async=1;
  a.src=g;
  m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
翻译咖啡剧本

((i, s, o, g, r, a, m) ->
  i["GoogleAnalyticsObject"] = r
  i[r] = i[r] or ->
    (i[r].q = i[r].q or []).push arguments_

  i[r].l = 1 * new Date()

  a = s.createElement(o)
  m = s.getElementsByTagName(o)[0]

  a.async = 1
  a.src = g
  m.parentNode.insertBefore a, m
) window, document, "script", "//www.google-analytics.com/analytics.js", "ga"
抛出错误
未定义参数
。这很有意义,因为这不是变量名。但我不知道如何手工翻译——JS中所有的逗号都让我感到厌烦。

这只是一个:

摘要

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。
[…]
说明

如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符。此运算符最常用的用法是在
for
循环中提供多个参数

逗号运算符的用法很奇怪,但您必须记住,您正在查看的JavaScript可能已被一两个预处理器损坏,因此它不适合人类使用。逗号运算符通常仅在for循环中使用,有时在某人试图变得聪明时在
return
s中使用

在将JavaScript翻译成CoffeeScript时,您可以在脑海中安全地用分号替换逗号。或者将JavaScript保留为JavaScript,因为:

  • 它不是供您编辑或维护的
  • 无论如何,最终都将是JavaScript

  • 这说明这是js2coffee的一个bug。也许就是这样。不过我还是觉得逗号的用法很奇怪。因为CoffeeScript是我构建过程的一部分,我想根据构建环境动态地交换UA密钥和域的不同值,所以我认为转换为CoffeeScript是有意义的。