我有一段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)。
答案 0 :(得分:7)
如果next
为falsy,则0
将在其位置使用。 JavaScript没有默认值运算符,因此即使语言的创建者具有called it an abusage,用户也可以利用此方法。
答案 1 :(得分:5)
如果您知道 next
和feather
是数字,那么是的,它没有任何功能。但是,如果你要传递像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)
答案 5 :(得分:1)
如果逻辑或 ||
之前的上下文是假的(包括空值和未定义),那么它将采用它之后的值。因此,在您的情况下,如果未定义next
或feather
或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;