javascript - 使用条件运算符运行多个语句将不起作用

标签 javascript ternary-operator

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;
}

我正在尝试通过代码大战来测试一个数字是否为质数。在我的最终条件下,我想打印到控制台并将值设置为 primeNum。如果我只做一个而不是两个,它似乎工作正常。

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

最佳答案

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

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 语句。

关于javascript - 使用条件运算符运行多个语句将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964586/

相关文章:

javascript - 使用 jQuery 代替 document.getElement

asp.net-mvc - Razor 三元运算符呈现 Html 标签 (ASP.NET MVC)

ruby-on-rails - 带有 html 标签的 erb 中的 Ruby 三元运算符

c++ - 与运行时相比,为什么三元运算符在编译时的工作方式不同?

c# - 嵌套内联 IF 语句

javascript - VueJS + VueFire - 通过身份验证将数据添加到 Firebase 实时数据库

javascript - 带递归的 JS Curry 函数

C++ 三元运算符逻辑

javascript - Coffeescript 存在运算符有时会检查未定义的情况,但并非总是如此

javascript - 错误数量的参数问题