“|| 0”在JavaScript中有什么作用?

时间:2014-03-26 20:53:02

标签: javascript

我有一段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)替换了一个函数,因为该函数有效地返回一个数字,羽毛也应该是一个数字,大多数情况下是0,有时是1)。

7 个答案:

答案 0 :(得分:7)

如果nextfalsy,则0将在其位置使用。 JavaScript没有默认值运算符,因此即使语言的创建者具有called it an abusage,用户也可以利用此方法。

Animated illustration of answer

答案 1 :(得分:5)

如果您知道 nextfeather是数字,那么是的,它没有任何功能。但是,如果你要传递像undefined这样的值,如果你在没有指定任何参数的情况下调用函数会有效,那么你会看到一些区别:

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

JavaScript中的&&||运算符会快速评估。它在你给出的例子中设置的方式,如果'next'计算为布尔值TRUE,那么它将被添加到'l',否则'0'将被添加。

答案 4 :(得分:1)

如果nextfalsy(类似虚假值),则使用零。

E.g。         下一个|| 0

等于

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

它强制虚假值为实际零数。

答案 5 :(得分:1)

如果逻辑或 ||之前的上下文是假的(包括空值和未定义),那么它将采用它之后的值。因此,在您的情况下,如果未定义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 :(得分:1)

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

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

更可读的方法是在函数的插图中测试该情况

if( isNaN(next) )next = 0; 

或者也包括其他测试

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