【问题标题】:Init object in javascript using || operator [duplicate]使用 || 在 javascript 中初始化对象运算符 [重复]
【发布时间】:2011-10-30 10:05:40
【问题描述】:

有时我会在 javascript 代码中看到类似这样的内容:

var myObj = myObj || {};

那么,这里到底发生了什么?我想||运算符返回真或假,但它不正确。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    了解 ||运算符,让我们首先看一个相当基本的示例。逻辑或运算符可用于为定义的变量提供默认值,如下所示:

     var bar = false,  
     foobar = 5,  
     foo = bar || foobar; // foo = 5  
    

    在这种情况下,只有当 bar 被认为是虚假的时,才会为 foo 分配 foobar 的值。一个假值可以被认为等于 0、假、未定义、空、NaN 或空(例如“”)。

    【讨论】:

      【解决方案2】:

      您可以使用此构造来获取不是nullundefined 等的对象。这用于您稍后在需要它是对象的代码中使用myObj 的情况。如果由于某种原因,myObj 在此行之前未定义,则重新分配它会留下undefinednull,在这种情况下,它将被分配{}

      你可以这样想:

      // If the object is already defined
      if (myObj)
          var myObj = myObj;
      // It was undefined or null, so assign an empty object to it.
      else
          var myObj = {};
      

      【讨论】:

        【解决方案3】:

        OR 运算 (||) 将返回第一个非空/假参数。

        在指定的情况下,如果myObj为false或null,则设置为空对象({}括号用于创建对象)

        【讨论】:

          【解决方案4】:

          如果 myObj 未定义或为 null,则它会计算 || 右侧的表达式,从而创建一个新的空对象

          所以myObj 如果不为 null,则为 myObj;如果 myObj 为 null,则为空对象

          希望你明白我的意思

          【讨论】:

          • 此外,如果 myObj 的值为 false 或 0 或 NaN 或空字符串,它也会导致变量被分配一个新对象。它不是只是未定义或为空。 JavaScript 中有 6 个错误的东西。
          • @Ray Toal:感谢您的加入
          【解决方案5】:

          ||是短路算子。如果第一个操作数的计算结果为 true,则不计算第二个操作数。

          因此 JS a || b 类似于 c# a ?? b

          【讨论】:

            【解决方案6】:

            这会初始化 myObj,除非它已经定义。

            【讨论】:

              【解决方案7】:

              || 运算符在计算结果为真时返回左操作数,否则计算并返回右操作数。换句话说,a || b 等价于 a ? a : b,只是 a 只计算一次。

              【讨论】:

              • +1 在 JavaScript stackoverflow.com/questions/476436/… 中也称为 null 合并运算符
              • 不,它只能用作 C# 的空合并运算符 (??) 的 替换。 :) 我从未听说过 || 称为“空合并运算符;”它一直是“逻辑或”运算符。
              • 同意。从 OP 之前的问题来看,他来自 ASP.NET 背景,这就是为什么要进行澄清。
              猜你喜欢
              • 2017-03-31
              • 1970-01-01
              • 2021-03-01
              • 2016-07-27
              • 2012-01-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多