JavaScript Variable fallback

前端 未结 4 1887
不知归路
不知归路 2021-02-13 15:28

Please can someone explain to me what this line of code does:

var list  = calls[ev] || (calls[ev] = {});

My best guess:

It\'s setting t

4条回答
  •  别那么骄傲
    2021-02-13 16:04

    This code is equivalent to

    var list;
    if (calls[ev])
      list = calls[ev];
    else {
      calls[ev] = {};
      list = calls[ev];
    }
    

    Two features of the language are used:

    1. The shortcut computation of boolean expressions (consider a || b. If a is true then b is not evaluated). Thus, if you assign var v = a || b; and a evaluates to something that can be cast to true, then b is not evaluated.
    2. The assignment statement evaluates to the last assigned value (to enable var a = b = c;)

    The parentheses are necessary to avoid this interpretation:

    var list = (calls[ev] || calls[ev]) = {};
    

    (which is an error).

提交回复
热议问题