OR运算符在此函数中的原因是什么?

时间:2018-04-14 22:00:55

标签: javascript factorial

我阅读了以下代码,但我无法理解它的含义“||”在这方面:

function factorial(numero) {
  numero = numero || 1
  return numero * factorial(numero - 1)
}

我理解逻辑运算符,但是如果传递任何参数,我觉得调用函数没有意义。这就是为什么我的问题的原因。

5 个答案:

答案 0 :(得分:5)

这叫做短路。 ||是OR运算符,但是它的计算方式,它将在左侧看(并且从不看右侧,因此“短路”。

如果是,它将使用该值。如果它是假的,它将使用右侧。这里,如果'numero'未定义,则为false,因此将使用占位符默认值1。

答案 1 :(得分:3)

这就像一个后备。如果numerofalsyfalse''undefinednullNaN0 )它会将值设置为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>

最后,我们可以将两者结合起来,得到一个全新的结果:

&#13;
&#13;
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;
&#13;
&#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.