将Google的新通用跟踪代码转换为Coffeescript

时间:2013-07-22 22:00:41

标签: google-analytics coffeescript

我正在尝试将google的新分析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');

翻译的Coffeescript

((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"

引发错误arguments_ is not defined。这是有道理的,因为那不是变量名。不知道如何手动翻译 - JS中的所有逗号都让我失望。

1 个答案:

答案 0 :(得分:2)

那只是comma operator

  

<强>摘要

     

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

     

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

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

在将JavaScript翻译为CoffeeScript时,您可以安全地用分号替换该逗号。或者只是将JavaScript保留为JavaScript:

  1. 不适合您编辑或维护。
  2. 无论如何它最终都是JavaScript。