问题描述
|
从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 \。