1

我正在尝试将谷歌的新分析 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"

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

4

1 回答 1

2

这只是一个逗号运算符

概括

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

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

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

在将 JavaScript 转换为 CoffeeScript 时,您可以放心地将逗号替换为分号。或者只是将 JavaScript 保留为 JavaScript,因为:

  1. 它不适合您编辑或维护。
  2. 无论如何,最终都将是 JavaScript。
于 2013-07-22T22:40:15.587 回答