【问题标题】:Variable equals to A || B. How does this work? [duplicate]变量等于 A || B. 这是如何工作的? [复制]
【发布时间】:2017-07-11 22:17:30
【问题描述】:

我遇到了这段代码:

function extend(out){
    out = out || {};
    for (var i = 1; i < arguments.length; i++){
        var obj = arguments[i];
        if (!obj) continue;
        for (var key in obj){
            if (obj.hasOwnProperty(key))
                out[key] = (typeof obj[key] === 'object') ? extend(out[key], obj[key]) : obj[key];
        }
    }
    return out;
}

out = out || {}; 行是什么意思,它是如何工作的?

这个函数基本上将不同的对象组合成一个对象。

【问题讨论】:

标签: javascript


【解决方案1】:

在 Javascript 中,|| 运算符返回第一个操作数,如果它是真值;否则,它返回第二个。所以在这里的上下文中,如果out 是一个假值(例如undefined),那么out = out || {} 会将{} 分配给out;否则,它会将out 的当前值分配给out,这实际上什么都不做。

目的是为out 提供默认值。如果调用者将false、null 或undefined 作为第一个参数传递,那么out 将是一个新对象。如果调用者将对象作为第一个参数传递,则函数将修改该对象。

【讨论】:

    【解决方案2】:
    out = out || {};
    

    如果在此行之前未设置变量“out”,则该值将设置为空数组。 JavaScript OR (||) variable assignment explanation

    【讨论】:

      【解决方案3】:

      这是这个的简化形式:

      function extend(out){
          if (!out) {
              out = {};
          }
          ...
      }
      

      【讨论】:

        【解决方案4】:

        它为out设置一个默认值,即如果out没有提供给函数,(或者它是一个假值,例如false,0,null,undefined或@987654327 @),然后将 out 分配给{}。

        它是如何工作的: Javascript 使用short circuit evaluation,这意味着 or (||) 运算符将返回第一个非假值。如果out 不是假的,则没有任何变化,如果 out 是假的,则它被设置为{}。

        【讨论】:

          【解决方案5】:

          这基本上是做这个的捷径

          if(!out){
              out = {};
          }
          

          基本上,如果 out 的计算结果不为“真”,那么在这种情况下,out 将被设置为一个空数组。

          这里也已经回答了:What does the construct x = x || y mean?

          【讨论】:

          • 这是一个空对象,不是数组。
          • 对不起,你是对的,我整个星期都在用 C# 工作。
          猜你喜欢
          • 2015-02-09
          • 2015-09-08
          • 1970-01-01
          • 2013-11-19
          • 1970-01-01
          • 2013-02-09
          • 1970-01-01
          • 2011-08-01
          • 2022-11-27
          相关资源
          最近更新 更多