在js中的函数内使用三元运算符

时间:2018-06-07 14:47:25

标签: javascript ternary-operator control-flow

我有一个问题:每当代码运行时,输出都是false。为什么呢?

    function isGreaterThan (numberOne, numberTwo) {
  switch (isGreaterThan) {
    case numberOne > numberTwo:
      return true;
      break;
    default:
      return false;
      break;
  }
}
console.log(isGreaterThan(67, 2));

3 个答案:

答案 0 :(得分:4)

您可以简化此操作,以避免滥用switch语句:

function isGreaterThan (numberOne, numberTwo) {
  return numberOne > numberTwo;
}
console.log(isGreaterThan(67, 2));

你的switch语句不正确,因为你需要传入一个条件,并在每个case语句中评估结果。

答案 1 :(得分:2)

这段代码很混乱。首先,您需要向switch提供对其所在功能的引用,而不是数值。

你可以大大简化这种情况:

function isGreaterThan (numberOne, numberTwo) {
  return numberOne > numberTwo; //return the result of the comparison
}

答案 2 :(得分:0)

您的功能显然无法按预期工作,因为您使用的是switch错误的方法。

首先,您正在使用函数本身作为表达式

进行切换
switch (isGreaterThan) {

然后,您将它与另一个表达式进行比较

 case numberOne > numberTwo:

这相当于

if ( isGreaterThan == (numberOne > numberTwo))

此检查永远不会成立,因为isGreaterThan甚至不是布尔值,但(numberOne > numberTwo)

因此,此开关将始终回退到默认语句

default:
      return false;
      break;

这就是为什么这个函数总会返回false

的原因

正如其他人已经提到的,你的功能可以用这种简单的形式

function isGreaterThan (numberOne, numberTwo) {
  return numberOne > numberTwo; 
}

现在,如果你想要一个建议,我真的认为你不明白switch的工作原理,所以请退后一步learn它应该如何工作。在这种情况下,没有理由使用开关。

顺便说一句,你案例中的三元运算符(如标题中所提到的)就像

一样
(numberOne > numberTwo) ? true : false