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

Gur*_*Rao 25 javascript jquery

说我很简单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;
})
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 39

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

在你的具体观点,我不明白你为什么要回来.看起来你只是在条件满足的情况下尝试做某事.一个简单的if陈述可能会更充分.


Igo*_*ush 10

JavaScript(像许多其他语言一样)具有表达式语句.表达式必须评估某事.声明执行操作.表达式可以用作语句,但反之则不然.

return是一份声明.它没有评估任何东西.您正在使用具有语法的三元表达式(也称为三元运算符)

test ? expression1 : expression2
Run Code Online (Sandbox Code Playgroud)

并评估expression1条件是否成立,expression2否则.这意味着,expression1expression2必须评估自己的东西,并不能说明.


最重要的是,你应该使用一个if.

  • 很好的答案,比我的更正式 (3认同)

Kaz*_*ara 6

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

condition ? expr1 : expr2 
Run Code Online (Sandbox Code Playgroud)

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)


Ale*_*c O 6

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

考虑一下:

var compare = function(a,b) {
    return (a == b ? true : false);
}
Run Code Online (Sandbox Code Playgroud)

现在测试它:

console.log(compare(1,1));
console.log(compare(1,2));
Run Code Online (Sandbox Code Playgroud)

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