【问题标题】:Using conditional operator to run more than one statement will not work使用条件运算符运行多个语句将不起作用
【发布时间】:2019-03-03 00:54:23
【问题描述】:
function isPrime(num) {
  //TODO
  let primeNum = false;
  let prime = (num == 0 || num == 1) ? primeNum = false : (num == 2) ? console.log("2 is prime") : 
  (num % 2 == 0) ? console.log("num is divisable by 2 therefore is not prime") : { 
      console.log("number may be prime"); 
      primeNum = true;
      }
  return primeNum;
}

我正在尝试挑战代码战来测试 num 是否为素数。在我的最后一个条件下,我想打印到控制台并将一个值设置为 primeNum。如果我做一个或另一个但不是两者都做,它似乎工作正常。

我知道可以通过编写一个包含两个语句的单独函数并调用它来代替,或者我可以使用 if 和 else 语句,但我在这里尝试遵循最佳实践。

【问题讨论】:

  • 您当前的代码似乎无法正常工作:Uncaught SyntaxError: Unexpected token .
  • 哈哈是的,这就是我被卡住的地方,如果我删除括号,它似乎可以工作,只有 console.log 但是当我添加 primeNum = true;它似乎不起作用。我不太确定你在为我指出什么
  • 而不是: { ... ; ... ; } 使用: ( ... , ... )
  • 感谢 patrick 解决了非常有帮助的问题

标签: javascript ternary-operator


【解决方案1】:

如果您必须在单个表达式中执行多个操作(例如在条件运算符的某个部分中),则可以在括号内使用逗号运算符。例如:

const condition = false;
const result = condition ? 'foo' : (
  console.log('falsey!'),
  'bar'
);
console.log(result);

或者,对于您的代码:

function isPrime(num) {
  const primeNum = (num == 0 || num == 1)
    ? false
    : (
      num == 2
      ? ( console.log("2 is prime"), true)
      : (
        num % 2 == 0
        ? (console.log("num is divisable by 2 therefore is not prime"), false)
        : (console.log("number may be prime"), null)
      )
    );
  return primeNum;
}
const result = isPrime(4);
console.log('4:', result)

但这不是一个好主意——它很难阅读,也不是最佳实践。最好改用标准的if/else 语句。

【讨论】:

  • 谢谢伙计,我将使用 if 和 else 语句代替。 +1
  • 在这种情况下我应该使用 const 而不是 let
  • 如果可能,最好始终使用const - 稍后查看代码时,let 更难阅读。使用const,您始终知道该变量永远不会被重新分配,因此您在阅读时不必担心的一件事。
【解决方案2】:

添加一些括号应该可以解决问题,否则您的解释器不知道哪个表达式属于哪个表达式。 嵌套三元组并不是最佳实践。考虑多个 if() return x;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多