适用于Google Analytics代码的coffeescript中的Javascript范围

时间:2013-05-02 12:01:30

标签: javascript google-analytics coffeescript google-analytics-api

Google Analytics代码使用全局_gaq对象作为分析命令。他们建议检查这样的对象是否已经存在,如下所示:

var _gaq = _gaq || [];
// Command
_gaq.push(['_trackPageview']);

在CoffeeScript中,这看起来像这样:

_gaq = _gaq or []

编译到这个:

(function() {
    var _gaq;
    _gaq = _gaq || [];
}).call(this);

如何编写导致上述Javascript行为的CoffeeScript代码?

3 个答案:

答案 0 :(得分:3)

要在全局范围中使_gaq变量可用,您可以在coffeescript中写这个:

_gaq = window._gaq ?= []

javascript输出:

var _gaq, _ref;
_gaq = (_ref = window._gaq) != null ? _ref : window._gaq = [];

这样你就可以调用_gaq.push(['_trackPageview']);

stackoverflow中有another question,它讨论了您可能想要检查的coffeescript中的全局变量。

答案 1 :(得分:1)

如果变量优先不存在,您可以有条件地为变量赋值:

window._gaq ?= []

这里有两件棘手的事情:

  1. 请注意,我引用了window._gaq。 Google AnalyticsJavaScript直接在_gaq对象上附加window对象。有关详细信息,请参阅:http://coffeescript.org/#lexical-scope

  2. 观察?=运算符。这是CoffeeScript的存在运算符,它提供比||=更安全的条件赋值。有关更多信息,请访问Google“CoffeeScript存在运营商”。 (我会直接链接你,但我不能发布另一个链接,因为我还没有足够的声望点。)

  3. 最后,我在咖啡网中汇总了我用于Google Analytics跟踪的要点:https://gist.github.com/brainix/4394158

答案 2 :(得分:0)

你可以这样做:

_gaq?.push ['_code']

将编译为:

// Generated by CoffeeScript 1.6.2
(function() {
  if (typeof _gaq !== "undefined" && _gaq !== null) {
    _gaq.push(['_code']);
  }

}).call(this);