我正在尝试将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中的所有逗号都让我失望。
答案 0 :(得分:2)
那只是comma operator:
<强>摘要强>
逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。
[...]
的描述强>如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符。此运算符的最常见用法是在
for
循环中提供多个参数。
这是逗号运算符的奇怪用法,但你必须记住,你正在查看的JavaScript可能已被一两个预处理器破坏,因此它不适合人类使用。逗号运算符通常仅用于for循环,有时用于return
s,当有人试图变得聪明时。
在将JavaScript翻译为CoffeeScript时,您可以安全地用分号替换该逗号。或者只是将JavaScript保留为JavaScript: