2011-05-29 12 views
14

Desde el código de seguimiento Google Analytics:javascript: ¿es esta una tarea condicional?

var _gaq = _gaq || []; 

¿cómo funciona esto?

¿Es una asignación de valor de variable condicional? ¿Es lo mismo que decir:

if(!(_gaq)) {_gaq = []; } 

?

+0

posible duplicado de [¿Qué hace el || operador do?] (http://stackoverflow.com/questions/830618/what-does-the-operator-do) –

+0

Respuesta corta: sí (aunque la segunda crea una edición global '_gaq' *: * si asumimos que '_gaq' no existe). –

+0

@Felix - a menos que algo más aplique un alcance diferente a '_gaq' – Quentin

Respuesta

15

El operador or (||) devolverá el lado izquierdo si es un valor verdadero, de lo contrario, regresará al lado derecho.

Es muy similar al segundo ejemplo, pero ya que hace uso de la palabra clave var, sino que también establece un ámbito local para la variable.

5

Sí, lo es.

El operador || se evalúa como el operando de la "verdad" más a la izquierda.
Si _gaq es "falsy" (como null, undefined, o 0), se evaluará en el lado derecho ([]).

+3

o 'falso' o' "" '(cadena vacía) –

+0

+1 porque me gustó la descripción –

1

en realidad es no lo mismo que decir:

if (!_gaq) _gaq = []; 

al menos no necesariamente. Considere esto:

function outer() { 
    var _gaq = null; 
    function inner() { 
    var _gaq = _gaq || []; 
    // ... 
    } 

    inner(); 
    _gaq = 1; 
    inner(); 
} 

Cuando hay un "_gaq" (odio a escribir que, por cierto) en un ámbito léxico exterior, lo que termina con una nueva variable deen el ámbito interno. La instrucción "if" difiere de esa manera muy importante —, en este caso solo habría un "_gaq".

2

¡Es lo mismo que decir:

if(!(_gaq)) {var _gaq = [];} 

(Esto se puede hacer ya que el var es izado por encima de la comprobación condicional, evitando así el error 'no definido', y también causará _gaq para ser automáticamente tratado como local en el alcance.)

Cuestiones relacionadas