【问题标题】:What happens when you return a value with or "||" operator? [duplicate]当您使用“||”返回值时会发生什么操作员? [复制]
【发布时间】:2020-07-20 18:25:33
【问题描述】:

我不想从这段代码中获取或想要任何东西。我只是对以下代码的一部分感到困惑。作者使用或|| 运算符返回了一个值。我的问题是什么时候返回哪个值?

function findSolution (target) {
    function find (current, history) {
        if (current == target) {
            return history
        }else if (current > target) {
            return null
        } else {
            return find (current + 5, `${history} + 5)`) ||
                    find(current * 3, `(${history} * 3)`)
        }
    }
    return find(1, '1')
}

console.log(findSolution(24))

这是困扰我的部分代码

return find (current + 5, `${history} + 5)`) ||
       find(current * 3, `(${history} * 3)`)

谁能告诉我,返回时的值是多少?为什么?

【问题讨论】:

  • 如果左边是truthy则返回,否则返回右边。
  • @NicholasTower 谢谢!请原谅我的愚蠢。我真正的困惑是,这里的真假将如何确定?我的意思是假设 ``` find (current + 5, ${history} + 5)) ``` 当它变成假的时候?
  • @YuryTarabanko 谢谢!请原谅我的愚蠢。我真正的困惑是,这里的真假将如何确定?我的意思是假设 ``` find (current + 5, ${history} + 5)) ``` 当它变成假的时候?
  • @kabirsumn return null 分支是假的。您可以在 developer.mozilla.org/en-US/docs/Glossary/Falsy 处阅读有关虚假值的信息。也没什么好担心的,我们都是初学者。 :)

标签: javascript function recursion


【解决方案1】:

来自MDN

如果 expr1 可以转换为 true,则返回 expr1;否则,返回 expr2。

换句话说,您可以将其视为这样的函数:

const or = (fel, sel) =>{
     if(fel) return fel;
     return sel;
}

这就是发生这种情况的原因:

const x = 0 || 1; // x == 1
// same as:
//
// const or = (fel, sel) =>{
//      if(fel) return fel;
//      return sel;
// }
// const x = or(0,1)

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 2011-01-18
    • 2011-09-30
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多