2010-06-23 90 views
2

可能重复:
In Javascript, what does it mean when there is a logical operator in a variable declaration?
what’s the javascript “var _gaq = _gaq || []; ” for ?这是什么意思:var _gaq = _gaq || [];

是什么JavaScript语法是什么意思?

var _gaq = _gaq || []; 
+1

重复的:[javascript是什么'var _gaq = _gaq || \ [\];'for?](http:// stackoverflow。com/questions/2538252/whats-the-javascript-var-gaq-gaq-for)并查看这个类似的问题:http://stackoverflow.com/questions/3088098/in-javascript-what-does-it-mean-什么时候有一个逻辑运算符在变量声明 – CMS 2010-06-23 19:11:58

+1

国际海事组织我认为这只是不好的代码,如果你用'var'语句声明'_gaq',它会影响*任何其他变量名为'_gaq',在范围链中更高... – CMS 2010-06-23 19:18:21

+0

@CMS - 除非您已经在全球范围内,情况则如此。但即使如此,var也没有必要。 – 2010-06-23 20:32:53

回答

10

它意味着_gaq除非是未定义的_gaq的值,否则_gaq将是一个空列表。

+5

除非'_gaq'它是'undefined','null','0',一个空字符串''NaN'或者'false' ... – CMS 2010-06-23 18:59:56

1

我会为解释此:

如果_gaq已经存储一个值,该值是无法转换为false(例如一个非空数组),取该值;否则,会使_gaq指一个空数组“

道格拉斯Crockford的写入以下有关此在他的著作使用Javascript - 好的部分

运营商||可以用来定义。默认值[...]

一些背景资料:

  • 在JavaScript中,有相当多的值在布尔表达式中计算为false;嫌疑人是号码0,空字符串,NaN,未定义值(请注意undefined不是关键字!)和false本身。

  • AFAIK,JavaScript的逻辑OR(||)操作者使用短路,即,如果在OR表达式中的第一项是true,第二个将不进行评价。)

3

如果_gaq未定义,将_gaq设置为空数组的方法很简单。它可能用于为函数的参数提供默认值。

2
_gaq || [] 

是,将返回_gaq如果它是一个非假值的表达式(我的意思是不为0,也不是假,也不“”),或在另一种情况下一个空数组。

var _gaq = _gaq || []; 

总是会将[]设置为_gaq。 我测试了它以这种方式从我的萤火控制台:

_gaq = 'crazy value'; 
(function(){var _gaq = _gaq || []; 
      console.log(_gaq); 
})(); 

记住有了这样的_gaq可能是在全局命名空间中定义的变量。但事实并非如此。

+0

我认为这是最好的答案,并且应该被标记为这样(除非提到的代码*在全局范围内运行,我认为是这样)。它明确阐述了CMS对这个问题的评论。 +10,如果我可以。 – 2010-06-23 20:24:01