来自Google Analytics分析跟踪代码:
var _gaq = _gaq || [];
这是如何工作的?
是条件变量赋值吗? 是否与说法相同:
if( !(_gaq) ) {_gaq = []; }
答案 0 :(得分:15)
如果它是真值,则运算符(||
)将返回左侧,否则它将返回右侧。
它与您的第二个示例非常相似,但由于它使用了var
关键字,因此它还为变量建立了局部范围。
答案 1 :(得分:5)
是的,是的。
||
运算符求值为最左边的“truthy”操作数
如果_gaq
为“麻痹”(例如null
,undefined
或0
),则会评估到右侧([]
)。
答案 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”。