【问题标题】:What does "|| 0" do in JavaScript? [duplicate]"|| 0" 在 JavaScript 中有什么作用? [复制]
【发布时间】:2014-05-05 13:15:29
【问题描述】:

我有一段 JavaScript 代码显示:

function(next, feather) {
  var l = Number(171) + (next || 0);
  var m = Math.max(1, l - 9);
  return {
    lc: 300 * (l + 1) * m + (5 * feather || 0)
  }
}

现在我已经简化了一点。但是谁能解释“|| 0”的作用?据我所知,它什么也没做。

(注意我用 Number(171) 替换了一个函数,因为该函数有效地返回一个数字,feather 也应该是一个数字,大多数时候为 0,有时为 1)。

【问题讨论】:

  • 它是OR 0,所以如果左边的任何东西都是假的,它会插入一个0
  • 和许多[javascript] "||"

标签: javascript


【解决方案1】:

如果nextfalsy,则将使用0 代替它。 JavaScript 没有默认值运算符,因此用户利用了这种方法,即使该语言的创建者有 called it an abusage

【讨论】:

  • 正确。例如,如果羽毛是一个字符串,5 * 羽毛 = NaN。 || 0 防止这种行为。
【解决方案2】:

如果你知道 nextfeather 是数字,那么是的,它没有任何功能。但是,如果您要传入像 undefined 这样的值,如果您在不指定任何参数的情况下调用该函数,实际上会发生这种情况,您会看到一些不同:

var next = undefined;
console.log(171 + next);        // NaN
console.log(171 + (next || 0)); // 171

当然,这不是万无一失的方法。传入null 对计算没有影响,而传入一个非空字符串(例如"1")会导致一些非常不同的结果。

【讨论】:

  • 啊,我明白了,这个函数经常在没有参数的情况下被调用。在那种情况下会使用 0 吗?
【解决方案3】:

variable || 0 查找变量,如果它是 undefined、null 或空(即零),它将使用数字 0 代替。这实际上是有道理的,因为如果它本身不是零,它将返回 NaN

如果这没有任何意义,那么应该:

undefined * 1 == NaN;
(undefined || 0) * 1 == 0;

【讨论】:

    【解决方案4】:

    如果nextfalsy(类似假的值),则使用零代替。

    例如 下一个 || 0

    等于

        if(!next) { return 0 } else { return next; }
    

    它强制类似假的值是一个实际的零数。

    【讨论】:

      【解决方案5】:

      如果逻辑或 || 之前的上下文是假的(这包括空值和未定义值),那么它将采用它之后的值。因此,在您的情况下,如果 nextfeather 未定义或为 0,则 0 的值将用于括号内的这些计算,如果两者均为 0 或 ,则基本上代码将如下所示未定义

      function(next, feather) {
        var l = Number(171) + 0;
        var m = Math.max(1, l - 9);
        return {
          lc: 300 * (l + 1) * m + 0
        }
      }
      

      【讨论】:

        【解决方案6】:

        在这种情况下使用 OR 运算符 || 基本上是检查天气的简写,是否包含 next。如果它来自某种数字计算,也许 next 有时可能是 NaN(这总是假的),所以这是使其为 0 的解决方法。

        var l = Number(171) + (next || 0);
        

        一种更易读的方法是在函数的插入处测试这种情况

        if( isNaN(next) )next = 0; 
        

        或者也包括其他测试

        if( isNaN(next) || next === null || typeof(next) === "undefined" )next = 0; 
        

        【讨论】:

          【解决方案7】:

          JavaScript 中的 &&|| 运算符将进行快捷计算。它在您给出的示例中的设置方式,如果“next”评估为布尔值 TRUE,则将添加到“l”,否则将添加“0”。

          【讨论】:

            猜你喜欢
            • 2016-01-26
            • 1970-01-01
            • 2012-04-23
            • 2019-03-01
            • 2011-05-09
            • 1970-01-01
            • 2012-08-09
            • 2018-10-19
            • 2019-12-15
            相关资源
            最近更新 更多