【问题标题】:Not returning true [duplicate]不返回真[重复]
【发布时间】:2021-07-08 15:58:38
【问题描述】:

我刚刚开始使用 Javascript 并尝试学习,目前只是基本的东西。 但问题是我真的不明白这个 switch 语句是如何返回 false if age = 0

function isUnderAge(age){
    const MAXNUMBER = 120;
    const MAXAGE = 18;
    const MINAGE = 0;
    switch(age){
        case(age < MAXAGE && age >= MINAGE && age <= MAXNUMBER):
            return true;

        default:
            return false;
    }
}

console.log(isUnderAge(0));

还有其他人看到这个问题吗?

任何帮助将不胜感激!

【问题讨论】:

  • switch 将参数与案例进行比较,在本例中,age 与布尔值进行比较。我确信这有一个很好的欺骗,但承认它可能很难找到。
  • 你认为age等于age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER吗?因为只有这样您的代码才能匹配案例。但是,这很可能是不可能的,因为age 将是一个数字,而下一个表达式将是一个布尔值,因此age === age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER 将始终是false。如果您需要复杂条件,请使用if 语句。如果您只需要文字比较age === 1age === 2 等,您可以使用switch(age) { case 1: /* ... */ case 2: /* ... */ }

标签: javascript tdd


【解决方案1】:

您将ageboolean 进行比较,因为age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER 导致boolean 值,所以它总是返回false

在您的情况下,age0,与 age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER 进行比较导致 true。所以comaring 0 === true 不匹配所以它将转到default 案例

function isUnderAge(age) {
  const MAXNUMBER = 120;
  const MAXAGE = 18;
  const MINAGE = 0;

  if (age < MAXAGE && age >= MINAGE && age <= MAXNUMBER) {
    return true;
  } else {
    return false;
  }
}

isUnderAge(12);
isUnderAge(40);

【讨论】:

  • return age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER
  • @VLAZ 刚看到OP的问题,认为OP不知道怎么写switch语句,那么OP一定是开始了他的编程生涯。 OP很难理解。 if/else 是非常基本的,所以我添加了帮助 OP。 ☺
【解决方案2】:

这并不是switch 的真正用例。看看下面:

function isUnderAge(age){
    const MAXNUMBER = 120;
    const MAXAGE = 18;
    const MINAGE = 0;
    
    if(age < MAXAGE && age >= MINAGE && age <= MAXNUMBER)
    {
        return true;
    }
    return false;
}

console.log(isUnderAge(0), isUnderAge(17), isUnderAge(20), isUnderAge(130));

【讨论】:

  • 顺便说一句,这并不是if 的真正工作,因为它所做的只是返回条件的结果。 return age &lt; MAXAGE &amp;&amp; age &gt;= MINAGE &amp;&amp; age &lt;= MAXNUMBER 比仅在此表达式为 true 时返回 true 和在表达式为 false 时返回 false 干净得多。
【解决方案3】:

更清洁的替代品

function isUnderAge(age) {      
  const MAXNUMBER = 120;
  const MAXAGE = 18;
  const MINAGE = 0;

  if(age < MINAGE) return true;
  return (age < MAXAGE) && (age <= MAXNUMBER) ? true : false;
}

console.log(isUnderAge(18));
console.log(isUnderAge(-1));
console.log(isUnderAge(17));

【讨论】:

  • if(age &lt; MINAGE) return true; 所以...如果我 5 岁,我可以买酒因为我不到 18 岁?
  • @VLAZ 问题是:isUnderAge?。如果你有 5 岁,答案是肯定的,或者在布尔情况下为真。读取函数名称。因此,您未到购买酒精的年龄。您可以反转逻辑,但您必须重新编写代码并更改函数名称,这是肯定的: const hasLicenseToBuyAlcoohol =(age)=> age >=18;
【解决方案4】:

正如 cmets 所说,您在每种情况下都会得到一个布尔值。 就像你说的那样 case true return true case false return false 其中 switch 将回退到默认情况 如果你使用 switch,也不要忘记 break

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2016-09-06
    相关资源
    最近更新 更多