[removed] is this a conditional assignment?

后端 未结 4 703
猫巷女王i
猫巷女王i 2021-02-05 12:45

From the google analytics tracking code:

var _gaq = _gaq || [];

how does this work?

Is it a conditional variable value assignment? Is i

相关标签:
4条回答
  • It's the same as saying:

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

    (This can be done since the var is hoisted above the conditional check, thereby avoiding a 'not defined' error, and it will also cause _gaq to be automatically treated as local in scope.)

    0 讨论(0)
  • 2021-02-05 13:11

    Yes, it is.

    The || operator evaluates to its leftmost "truthy" operand.
    If _gaq is "falsy" (such as null, undefined, or 0), it will evaluate to the right side ([]).

    0 讨论(0)
  • 2021-02-05 13:17

    The or operator (||) will return the left hand side if it is a true value, otherwise it will return the right hand side.

    It is very similar to your second example, but since it makes use of the var keyword, it also establishes a local scope for the variable.

    0 讨论(0)
  • 2021-02-05 13:21

    Actually it's not the same as saying:

    if (!_gaq) _gaq = [];
    

    at least not necessarily. Consider this:

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

    When there's a "_gaq" (I hate typing that, by the way) in an outer lexical scope, what you end up with is a new variable in the inner scope. The "if" statement differs in that very important way — there would only be one "_gaq" in that case.

    0 讨论(0)
提交回复
热议问题