Z google kodu śledzenia Analytics:javascript: czy jest to zadanie warunkowe?
var _gaq = _gaq || [];
jak to działa?
Czy jest to przypisanie zmiennej wartości warunkowej? Czy to to samo, co powiedzenie:
if(!(_gaq)) {_gaq = []; }
?
Z google kodu śledzenia Analytics:javascript: czy jest to zadanie warunkowe?
var _gaq = _gaq || [];
jak to działa?
Czy jest to przypisanie zmiennej wartości warunkowej? Czy to to samo, co powiedzenie:
if(!(_gaq)) {_gaq = []; }
?
Operator lub (||
) zwróci lewą stronę, jeśli jest to wartość true, w przeciwnym razie zwróci ona prawą stronę.
Jest bardzo podobny do twojego drugiego przykładu, ale ponieważ używa słowa kluczowego var
, ustanawia także lokalny zasięg dla zmiennej.
Tak, jest.
Operator ||
ocenia swój lewy "prawy" operand.
Jeśli _gaq
jest "falsy" (np. null
, lub 0
), oceni po prawej stronie ([]
).
lub 'false' lub' "" '(pusty ciąg) –
+1 ponieważ podoba mi się twój opis –
Właściwie to nie tak samo jak powiedzenie:
if (!_gaq) _gaq = [];
przynajmniej niekoniecznie. Rozważ to:
function outer() {
var _gaq = null;
function inner() {
var _gaq = _gaq || [];
// ...
}
inner();
_gaq = 1;
inner();
}
Kiedy pojawia się „_gaq” (Nienawidzę wpisując który, nawiasem mówiąc) w zewnętrznej zakresem leksykalnym, co skończy się to nowy zmienna w zakresie wewnętrznej. Oświadczenie "jeśli" różni się w ten bardzo ważny sposób, w takim przypadku istnieje tylko jedna "_gaq".
To samo jak powiedzenie:
if(!(_gaq)) {var _gaq = [];}
(Można to zrobić ponieważ var jest podciągnięta wyżej kontroli warunkowego, unikając w ten sposób „nie określone” błąd i będzie to również spowodować _gaq być automatycznie traktowane jako lokalne w zakresie.)
możliwy duplikat [Co to || operator do?] (http://stackoverflow.com/questions/830618/what-does-the-operator-do) –
Krótka odpowiedź: tak (chociaż druga tworzy globalną edycję '_gaq' *: * jeśli przyjmiemy że '_gaq' nie istnieje). –
@Felix - chyba, że coś innego stosuje inny zakres niż '_gaq' – Quentin