2011-05-29 14 views
14

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 = []; } 

?

+0

możliwy duplikat [Co to || operator do?] (http://stackoverflow.com/questions/830618/what-does-the-operator-do) –

+0

Krótka odpowiedź: tak (chociaż druga tworzy globalną edycję '_gaq' *: * jeśli przyjmiemy że '_gaq' nie istnieje). –

+0

@Felix - chyba, że ​​coś innego stosuje inny zakres niż '_gaq' – Quentin

Odpowiedz

15

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.

5

Tak, jest.

Operator || ocenia swój lewy "prawy" operand.
Jeśli _gaq jest "falsy" (np. null, lub 0), oceni po prawej stronie ([]).

+3

lub 'false' lub' "" '(pusty ciąg) –

+0

+1 ponieważ podoba mi się twój opis –

1

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".

2

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.)

Powiązane problemy