我阅读了以下代码,但我无法理解它的含义“||”在这方面:
function factorial(numero) {
numero = numero || 1
return numero * factorial(numero - 1)
}
我理解逻辑运算符,但是如果传递任何参数,我觉得调用函数没有意义。这就是为什么我的问题的原因。
答案 0 :(得分:5)
这叫做短路。 ||是OR运算符,但是它的计算方式,它将在左侧看(并且从不看右侧,因此“短路”。
如果是,它将使用该值。如果它是假的,它将使用右侧。这里,如果'numero'未定义,则为false,因此将使用占位符默认值1。
答案 1 :(得分:3)
这就像一个后备。如果numero
为falsy
值false
,''
,undefined
,null
,NaN
,0
)它会将值设置为1
。
正如我们在这两个测试中看到的那样,如果没有传递值,它将使用回退,否则它将使用作为参数传递的值。
function test(value) {
console.log(value || 'Not Set')
}
test()
test('Awesome')

还有更先进的方法,它们的工作方式不同,但也产生类似的效果。在这里,我们可以使用&&
来完成相反的操作,如果上一个命令是truthy
,则只会运行下一个项目。
let items = []
function addItem(a) {
let contains = items.includes(a)
!contains && items.push(a)
}
addItem('cat')
addItem('dog')
addItem('pig')
addItem('cat')
addItem('cat')
console.log(items)

在上面我们使用&&
而不是||
,所以如果contains
为真,我们运行下一个命令,否则结束当前语句。< / p>
最后,我们可以将两者结合起来,得到一个全新的结果:
let items = []
function addItem(a) {
let contains = items.includes(a)
!contains && a % 2 == 0 && items.push(a) || console.log('Item', a, 'is not valid')
}
addItem(1)
addItem(2)
addItem(10)
addItem(15)
addItem(10)
addItem(100)
addItem(102)
addItem(103)
console.log(items)
&#13;
在这个例子中,我们只在数组中插入项目,如果它们不在数组中并且是偶数。否则我们将输出该值不是有效插入,因为它已经在数组中,或者它不是事件。
答案 2 :(得分:1)
这意味着或在JavaScript中始终表示或。该声明的作用是将numero
设置为numero
的当前值(如果它是 truthy 值)或1
(如果不是)。
新语法允许您执行此操作:
function factorial(numero = 1) {
....
}
将默认值设置为参数更方便。
答案 3 :(得分:0)
它只展开第二个分支如果在你的情况下没有给出参数,如上所述它被称为短路评估。
将其视为IF numero被传递,将其分配给变量ELSE set variable to 1
答案 4 :(得分:0)
在Javascript中,但在其他语言中,运算符 || 定义为:
逻辑OR(||)expr1 || expr2如果可以转换为true,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,||如果任一操作数为true,则返回true。 (https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Operators/Logical_Operators)
该片段是:
的简写sonata_admin:
dashboard:
groups:
app.admin.group.content:
items:
- app.admin.post
app.admin.group.blog:
items:
- sonata.admin.page
因此,如果numero是 falsey 值(0,Nan,null,undefined或空字符串),则将其设置为1.