【问题标题】:What does var x = x || {} ; [duplicate]var x = x || 是什么? {} ; [复制]
【发布时间】:2023-03-04 14:37:01
【问题描述】:

以下代码在java脚本中做了什么:

var x = x || {};

【问题讨论】:

  • 这个问题是旧的,另一个是重复的。
  • JavaScript 中的逻辑表达式从左到右进行求值,并使用以下规则测试它们是否存在可能的“短路”求值:false && (anything) 短路求值为 false。真 || (anything) 短路评估为真。在上面的示例中,如果 x 为真,则 x 成为分配的值。如果 x 为 false 或未定义,则第二个操作数成为 {} 的赋值。

标签: javascript


【解决方案1】:

如果定义了 var x,那么它将是定义的值。否则它将是空对象,例如[object Object]

例如,在以下代码块中,x 将是10

var x = 10;
x = x || {}

但是,如果:

var x = x || {};

那么x 将是[object Object]

【讨论】:

    【解决方案2】:

    永远不要写“var x = x || {};”本身。

    唯一与“var x = {};”不同的情况是 x 先前在同一范围内初始化的时间。那是不道德的。注意:

    function() {
      x = {foo:"bar"};
      var x = x || {};
    }
    

    与,相同,只是更令人困惑,

    function() {
      var x = {foo:"bar"};
      x = x || {};
    }
    

    在这两种情况下,都不会在全局范围内引用符号“x”的值。

    这个表达式是合法的惰性属性初始化习语的混淆变体:

    function( foo ) { 
      foo.x = foo.x || {};
      foo.x.y = "something";
    }
    

    【讨论】:

      【解决方案3】:

      || 是逻辑 OR

      表达式

      var x = x OR {};
      

      那时应该会变得更加明显。

      如果x 有一个falsy 值(如nullundefined0""),我们将x 分配一个空对象{},否则只保留当前值。这个的长版本看起来像

      var x = x ? x : {};
      

      【讨论】:

      • 优秀的答案。我是一名 c 程序员,这没有任何意义。
      • 如果这对您没有任何意义,那么您可能还需要注意!!value,它返回一个表示value 真实性的布尔值,有时非常方便。
      • 您的长版本不正确:考虑 x 先前定义并设置为 null 的情况。 var x = x || {}; 会将 x 重新定义为一个对象,而 var x = (typeof x !== 'undefined') ? x : {}; 不会。不过前面的段落是正确的。
      • @Tim: 是的,我忘了typeof null === 'object' 谜。
      【解决方案4】:

      除非 x 被定义或赋值,否则它将把空对象作为默认值..

      也就是说,

      for example
      x = 10
      var x = x || {};
      

      输出必须是

      10
      

      如果未分配 x 值。输出值必须是,

      undefined
      

      【讨论】:

        【解决方案5】:

        如果xnull(未定义,false),则将x 分配给一个新的空对象,如果不是null,则保留它的现有值。

        【讨论】:

          【解决方案6】:

          如果x 未定义(或为null,或任何其他false 值),则它变为空对象。

          【讨论】:

            猜你喜欢
            • 2016-11-12
            • 2018-09-25
            • 2019-03-27
            • 2023-03-31
            • 2023-03-27
            • 2014-02-11
            • 2013-08-17
            • 2019-09-11
            • 2011-03-06
            相关资源
            最近更新 更多