【问题标题】:Return statement inside JavaScript ternary operator expression [duplicate]JavaScript三元运算符表达式中的返回语句[重复]
【发布时间】:2019-09-28 06:30:48
【问题描述】:

问题

有没有办法在三元运算符中执行return 语句?

这很奇怪,因为我觉得 三元 就像 if/else 的简写,你可以在 if/else 中执行 return 语句强>如果/否则。

但由于某种原因,我无法在 三元运算符中执行 return 语句:

常规 IF/ELSE:

// THIS WORKS
function foo() {
  if (true) {
    console.log('This is true');
  } else {
    console.log('Not true');
  }
}

三元为 IF/ELSE:

// THIS ALSO WORKS
function bar() {
  true ? 
    console.log('This is true')
  : console.log('Not true');
}

上面的两个代码都可以正常工作。但是当涉及到 return 时,会发生以下情况:

带返回的常规 IF/ELSE:

// THIS WORKS
function foo() {
  if (true) {
    console.log('This is true');
  } else {
    return;
  }
}

TERNARY 作为 IF/ELSE 并返回:

// THIS DOESN'T WORK
function bar() {
  true ? 
    console.log('This is true')
  : return;
}

关于可能的重复:

我环顾四周,没有找到这个确切问题的答案。

我很清楚我可以返回一个三元运算符,就像下面的一段代码,但这不是这个问题的目的。

function foo() {
  return(
    true ?
      console.log('This is true')
    : null
  );
}

【问题讨论】:

  • ? 的右侧必须计算为表达式,但return 不能计算为表达式;它必须是一个独立的声明。如果你想return,它需要在外面。 (类似地,throw 不能计算为表达式,尽管您可以在 IIFE 中包含 throw 来抛出,而 return 不能这样做)回到 if/else 是您唯一的选项
  • "这很奇怪,因为我觉得三元就像 if/else 的简写" 好吧,它不是你真的不应该这样想。这是一个严重的过度简化,只会让你感到困惑。三元运算符总是产生两个值之一 - 就是这样。或者更正式地说,它对 three 表达式进行操作(因此 ternary - n 元表达式的特定形式)。您评估一个表达式,您根据结果执行另外两个表达式之一。 if 语句只运行两个代码分支之一。他们可能在某些情况下会做同样的事情,但并不等同。
  • 顺便说一句,如果您曾经使用三元组只是为了省写if,那么您可能误用了三元组。
  • 情况几乎完全相同——您试图在需要表达式的地方使用语句。为什么不允许这样做的逻辑是相同的。
  • 为什么重新提出问题?当然,也许这个骗子并不完美,但that doesn't mean the question wasn't asked or answered beforeMore than onceOr twice。我们真的需要这么多悬而未决的问题吗?

标签: javascript function conditional


【解决方案1】:

这是不可能的——三元运算符需要表达式,而return 是一个语句。使用简单的if 语句:

function foo() {
    if (true) console.log("This is true"):
    else return;
}

【讨论】:

    【解决方案2】:

    不,这是不可能的。三元运算符的操作数是expressions。而returnstatement。你应该使用ifelse。根据MDN

    参数

    条件
    其值用作条件的表达式。

    exprT, exprF
    具有任何类型值的表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2019-12-30
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      相关资源
      最近更新 更多