为什么我们不能在三元运算符中返回?

IT技术 javascript jquery
2021-01-19 09:44:31

假设我有一个简单的form,我想检查是否form已经改变。如果它改变了submit它会阻止表单提交,所以我使用 return 而不是 usingif-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>

5个回答

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

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

你的条件没有问题,但关于 MDN 名称的问题expr2:它将它定义为一个表达式(可以评估为一个值的东西)。三元运算符并不意味着执行一个或另一个动作,而是产生一个或另一个值。您可以在很多情况下滥用它,因为大多数操作将返回 undefined 或更合适的内容,但您不能使用return.
2021-03-27 09:44:31
同意.. 仅当足够但根据这里的条件部分的定义,其中说An expression that evaluates to true or false我的条件可以返回truefalse基于该表达式执行.. 但为什么不返回是我的疑问.. 无论如何你有优雅的答案.. 接受-5分钟.. ;)
2021-04-04 09:44:31

JavaScript(像许多其他语言一样)有表达式语句表达式必须求值。一个语句执行一个动作。表达式可以用作语句,但反之则不然。

return是一个声明它不评估任何东西。您正在使用三元表达式(又名三元运算符),其语法为

test ? expression1 : expression2

并评估expression1条件是否成立,expression2否则。这意味着expression1and expression2must 本身对某事进行评估,并且不能是陈述。


最重要的是,您应该使用if.

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

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 )

有一种方法可以使用三元语句返回值。我在 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 代码有效。

有点extension functionjavascript很高兴知道,但答案与我的问题无关..
2021-04-12 09:44:31

这是具有三元返回值的函数

function tst(x, y = 1) {
    x == 0 ? x = 1 : y *= x;
  return x<=1? y:tst(x-1,y)
}
欢迎来到 SO!请考虑在已经提供的答案之上添加一个值,特别是对于一个古老的问题,您的答案会受到同行的欢迎。如果您还没有回答,请看看如何回答ps请注意,这个问题是关于return关键字三元(条件)运营商,为什么要做这样的结果SyntaxError
2021-03-27 09:44:31