从 Google Analytics 的跟踪代码中:
var _gaq = _gaq || [];
这是如何工作的?
这是一个条件变量赋值吗?与这样说是一样的吗:
if( !(_gaq) ) {_gaq = []; }
?
从 Google Analytics 的跟踪代码中:
var _gaq = _gaq || [];
这是如何工作的?
这是一个条件变量赋值吗?与这样说是一样的吗:
if( !(_gaq) ) {_gaq = []; }
?
或运算符(||
)将返回左侧内容,如果它是一个true值,否则将返回右侧内容。
这与您的第二个示例非常相似,但由于使用了var
关键字,它还为变量建立了一个局部作用域。
是的,没错。
||
运算符会对其最左边的"真值"操作数进行求值。
如果 _gaq
是"假值"(比如 null
, undefined
, 或者 0
),它就会求值为右边的表达式([]
)。
false
或者 ""
(空字符串)。 - Russ Cam这句话的意思是:
if( !(_gaq) ) {var _gaq = [];}
这可以通过将变量提升到条件检查之前来实现,从而避免“未定义”错误,并且还会自动将_gaq视为本地范围。
if (!_gaq) _gaq = [];
至少不一定。考虑一下:
function outer() {
var _gaq = null;
function inner() {
var _gaq = _gaq || [];
// ...
}
inner();
_gaq = 1;
inner();
}
_gaq
*编辑:如果我们假设_gaq
不存在)。 - Felix Kling_gaq
设置为假值(如0
),那么它将被重新分配为[]
的值。因此,它的行为不完全像 Ruby 中的条件赋值。 - steve