javascript:这是有条件的分配吗?

问题描述

| 从Google Analytics(分析)跟踪代码中:
var _gaq = _gaq || [];
这是如何运作的? 它是条件变量值分配吗? 是否跟说的一样:
if( !(_gaq) ) {_gaq = []; }
?     

解决方法

        或运算符(
||
)如果为真值,则将返回左侧,否则将返回右侧。 它与第二个示例非常相似,但是由于使用了
var
关键字,因此它还为变量建立了局部作用域。     ,        是的。
||
运算符的运算结果为最左侧的“ truthy”操作数。 如果
_gaq
是\“ falsy \”(例如
null
undefined
0
),它将在右边计算(
[]
)。     ,        就像说:
if( !(_gaq) ) {var _gaq = [];}
(之所以可以这样做,是因为将var悬挂在条件检查之上,从而避免了“未定义”错误,并且还会导致_gaq被自动视为作用域中的局部变量。)     ,        其实跟说的不一样:
if (!_gaq) _gaq = [];
至少不一定。考虑一下:
function outer() {
  var _gaq = null;
  function inner() {
    var _gaq = _gaq || [];
    // ...
  }

  inner();
  _gaq = 1;
  inner();
}
当外部词汇范围中有一个\“ _ gaq \”(顺便说一句我讨厌键入)时,最终得到的是内部范围中的一个新变量。 \“ if \”语句在非常重要的方面有所不同–在这种情况下,只会有一个\ __ gaq \。