從谷歌Analytics跟蹤代碼:javascript:這是一個有條件的任務嗎?
var _gaq = _gaq || [];
是如何工作的呢?
它是一個條件變量賦值? 這是否與說:
if(!(_gaq)) {_gaq = []; }
?
從谷歌Analytics跟蹤代碼:javascript:這是一個有條件的任務嗎?
var _gaq = _gaq || [];
是如何工作的呢?
它是一個條件變量賦值? 這是否與說:
if(!(_gaq)) {_gaq = []; }
?
如果它是一個真值,or或運算符(||
)將返回左側,否則它將返回右側。
它與您的第二個示例非常相似,但由於它使用了關鍵字var
,因此它還爲該變量建立了一個本地範圍。
是的。
||
運算符評估爲其最左邊的「truthy」操作數。
如果_gaq
是「falsy」(例如null
,undefined
或0
),它將評估到右側([]
)。
或'false'或'「」''(空字符串) – 2011-05-29 13:15:59
+1因爲我喜歡你的描述 – 2012-09-20 14:34:06
其實它不等於說:
if (!_gaq) _gaq = [];
至少不一定。試想一下:
function outer() {
var _gaq = null;
function inner() {
var _gaq = _gaq || [];
// ...
}
inner();
_gaq = 1;
inner();
}
當有一個「_gaq」(我討厭打字,通過的方式)在外部詞法範圍,你最終是什麼在內部範圍新變量。 「if」聲明的不同之處在於非常重要的方式—在那種情況下只有一個「_gaq」。
這是相同的話說:
if(!(_gaq)) {var _gaq = [];}
(這是可以做到,因爲VAR是條件檢查上面的懸掛,從而避免了「沒有定義」的錯誤,而且還會引起_gaq是自動視爲範圍內的本地範圍。)
可能的[重要]運算符做?](http://stackoverflow.com/questions/830618/what-does-the-operator-do) – 2011-05-29 13:08:37
簡短回答:是(雖然第二個創建一個全局'_gaq' *編輯:*如果我們假設'_gaq'不存在)。 – 2011-05-29 13:08:51
@Felix - 除非別的東西對'_gaq'應用不同的範圍 – Quentin 2011-05-29 13:12:26