【问题标题】:Why can't we have return in the ternary operator?为什么我们不能在三元运算符中返回?
【发布时间】:2016-05-15 20:53:34
【问题描述】:

假设我有一个简单的form,我想检查form 是否已更改。如果它更改了submit,它会阻止表单提交,所以我使用 return 而不是使用 if-else 语句我尝试使用 ternary operation 但不幸的是我遇到了错误 Uncaught SyntaxError: Unexpected token return 但我不明白为什么会出现这个错误?三元运算是否只用于赋值?这部分不确定。以下只是我尝试做的一个示例。

var form_original_data = $("#frmProfile").serialize();

$("#frmProfile").on('submit', function(e) {
  e.preventDefault();
  $("#frmProfile").serialize() != form_original_data ? $("body").append('changed') : return;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="frmProfile">
  <input type="text" value="name" />
  <input type="submit" value="Go" />
</form>

【问题讨论】:

  • 没有意义...使用 if
  • @epascarello 不我会选择if 没有问题,但这是否无效?
  • 究竟返回什么?三元运算符一般用作var x = toCheck ? true : false;
  • 返回在某种意义上爆发或说阻止默认操作,即提交...@adeneo..
  • 为了防止提交,你必须做的不仅仅是返回,你必须返回false。这很容易用if ($("#frmProfile").serialize() != form_original_data) e.preventDefault() 完成,不需要三进制

标签: javascript jquery


【解决方案1】:

三元运算符的计算结果为表达式,而表达式不能包含 return 语句(如果将表达式分配给变量会如何表现?)。但是,您可以很好地返回三元运算符的结果,即return condition? returnValue1 : returnValue2;

关于你的具体观点,我不明白你为什么想回来。看起来您仅在满足条件时才尝试做某事。一个简单的if 语句可能会更合适。

【讨论】:

  • 同意.. 仅当足够但根据定义 here 对于条件部分表示An expression that evaluates to true or false 我的条件可以返回truefalse 和基于该表达式执行.. 但是为什么不返回是我的疑问.. 无论如何你有优雅的答案.. 在 T-5 分钟内接受.. ;)
  • 您的条件没有问题,但 MDN 名称为 expr2 :它将它定义为表达式(可以评估为值的东西)。三元运算符并不意味着执行一个动作或另一个,而是产生一个值或另一个。你可以在很多情况下滥用它,因为大多数操作会返回 undefined 或更合适的值,但你不能用 return 做到这一点。
【解决方案2】:

JavaScript(与许多其他语言一样)具有表达式语句。表达式必须评估为某事。一个语句执行一个动作。表达式可以用作语句,但反之则不行。

return 是一个statement。它不评估任何东西。您正在使用 ternary expression(又名三元运算符),其语法如下:

test ? expression1 : expression2

如果条件成立,则评估为expression1,否则评估为expression2。这意味着expression1expression2 必须自己评估某些东西,并且不能是语句。


底线,你应该使用if

【讨论】:

    【解决方案3】:

    因为它在语法上不正确。这是三元运算符的正确语法 -

    condition ? expr1 : expr2 
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

    return 不是表达式的一部分。 return 后跟一个表达式。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return)

    【讨论】:

      【解决方案4】:

      有一种方法可以使用三元语句返回值。我在用 Swift 编程时经常使用它,因为我相信它可以清理代码。在我看来,这比使用 if 语句要好得多。它也节省了大量的代码。

      考虑一下:

      var compare = function(a,b) {
          return (a == b ? true : false);
      }
      

      现在测试它:

      console.log(compare(1,1));
      console.log(compare(1,2));
      

      分别计算为truefalse。虽然这在 Swift 中几乎相同,但我已经验证了这段 Javascript 代码有效。

      【讨论】:

      • javascript 中的extension function 的一种。很高兴知道,但答案与我的问题无关..
      【解决方案5】:

      这是一个返回三元的函数

      function tst(x, y = 1) {
          x == 0 ? x = 1 : y *= x;
        return x<=1? y:tst(x-1,y)
      }
      

      【讨论】:

      • 欢迎来到 SO!请考虑在已经提供的答案之上添加一个值,特别是对于一个古老的问题,您的答案会受到同行的好评。如果您还没有,请查看how to answer。附:请注意,问题是关于 return 关键字 inside 三元(条件)运算符以及为什么尝试这样做会导致 SyntaxError
      猜你喜欢
      • 2021-04-28
      • 2014-08-03
      • 2014-11-29
      • 2013-07-30
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 2015-10-07
      • 2018-03-16
      相关资源
      最近更新 更多