javascript:这是一个有条件的任务吗?

时间:2011-05-29 13:06:48

标签: javascript

来自Google Analytics分析跟踪代码:

var _gaq = _gaq || [];

这是如何工作的?

是条件变量赋值吗? 是否与说法相同:

if( !(_gaq) ) {_gaq = []; }

4 个答案:

答案 0 :(得分:15)

如果它是真值,则运算符(||)将返回左侧,否则它将返回右侧。

它与您的第二个示例非常相似,但由于它使用了var关键字,因此它还为变量建立了局部范围。

答案 1 :(得分:5)

是的,是的。

||运算符求值为最左边的“truthy”操作数 如果_gaq为“麻痹”(例如nullundefined0),则会评估到右侧([])。

答案 2 :(得分:2)

与说法相同:

if( !(_gaq) ) {var _gaq = [];}

(这可以完成,因为var在条件检查之上被提升,从而避免了“未定义”的错误,并且它还会导致_gaq在范围内被自动视为本地。)

答案 3 :(得分:1)

实际上与说:

相同
if (!_gaq) _gaq = [];

至少不一定。考虑一下:

function outer() {
  var _gaq = null;
  function inner() {
    var _gaq = _gaq || [];
    // ...
  }

  inner();
  _gaq = 1;
  inner();
}

如果在外部词法范围内存在“_gaq”(我讨厌输入那个),那么你最终得到的是内部范围中的 new 变量。 “if”语句以非常重要的方式有所不同 - 在这种情况下只会有一个“_gaq”。