【问题标题】:What is the exact meaning of this code using the || ("OR") operator?这段代码使用 || 的确切含义是什么? (“或”)运算符?
【发布时间】:2011-04-18 17:09:52
【问题描述】:

我在某处看到了这段代码 sn-p:

var idx = SOME_VALUE;

var color = {
  yellor: 1,
  red: 2,
  black: 0
};

var x = color[idx] || []; // Is this means if color[idx] is null, then return an empty array?

我只能猜测代码var x = color[idx] || []; 的意思是如果color[idx] 为空,则返回一个空数组到x,否则x= color[idx]。我说的对吗?

不过,我需要一个解释。这段代码是不是和下面的逻辑一样?

CONDITION==VALUE? TRUE_goes_here : FALSE_goes_here

【问题讨论】:

    标签: javascript logical-operators


    【解决方案1】:

    这意味着如果color[idx] 是“假的”,则使用空数组代替。 “虚假”值是 false(当然)、0NaN""undefinednull(所有其他值都是“真实的”)。该成语是 JavaScript 的 curiously powerful || operator* 的一个示例。

    在这种情况下,如果color 不包含名称为idx 的属性,它会提供默认值(因为当您索引到这样的对象并且键与任何现有属性都不匹配时名称,结果是undefined):x 将是1(如果idx 是“yellor”),2(如果idx 是“红色”),0(如果@987654339 @ 是“黑色”),或者 [] 如果 idx 是其他任何东西。

    所以在你的问题结束时回答你的问题,基本上,是的。它是:

    var x = color[idx];
    if (!x) {
        x = [];
    }
    

    var x = color[idx] ? color[idx] : [];
    

    * (这是我贫血的小博客上的帖子。)

    【讨论】:

      【解决方案2】:

      你是对的。

      在 Javascript 中,a || b 计算为第一个“真实”操作数。
      如果a 是“假的”(例如,nullfalseundefined0),它将评估为b

      【讨论】:

        【解决方案3】:

        or 运算符 || 将为您提供第一个不作为条件计算的值 false(如 0null 做)。

        这意味着使用 0 || null || 5 将产生 5 作为结果。

        该代码中的内容是 JavaScript 中的一种常见做法,即使用 || 运算符在变量初始化时指定默认值。那是因为

        var x = something || default_value;
        

        更具可读性
        var x = (something ? something : default_value);
        

        【讨论】:

          【解决方案4】:
          var x = color[idx] || [];
          

          如果color 是一个具有名为String(idx) 的属性的对象,并且该属性的值为真,则将该属性的值分配给x。否则,让x 为空数组。

          【讨论】:

            【解决方案5】:

            在这种情况下,|| 是“布尔或”运算符。与许多语言一样,JavaScript 中的布尔运算符是短路的。例如,假设我有以下布尔表达式:

            var booleanValue = someFunction() || otherFunction()
            

            如果第一个函数返回的值是真等价的,则不需要评估第二个值,otherFunction() 将不会被执行,因为“或”运算符返回一个真等价的值,不管它的某些操作是真等价。这很好,因为它使您的代码更高效:只评估所需的表达式。

            此外,在这种情况下还有一个奇怪的行为:由于表达式的第一个值是等价的,JavaScript 只是将它作为表达式的结果返回,因为这意味着整个表达式无论如何都是真的。

            在您的代码中,color[idx] 的值如果已设置,则为真等效。由于它是“或”运算中的真等效值,因此它作为表达式的值返回。但是,如果未设置,则返回 undefined,这是一个假等效值。因此 JavaScript 必须评估下一个值来定义“或”表达式是否为真。由于下一个值是最后一个值,并且表达式的值完全取决于它,因此如果第一个值是假等价的,则表达式返回下一个值。

            【讨论】:

              猜你喜欢
              • 2011-03-08
              • 2011-09-09
              • 2020-09-24
              • 2015-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-10
              相关资源
              最近更新 更多