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

时间:2016-02-05 19:03:34

标签: javascript jquery

说我有一个简单的form,我想检查form是否发生了变化。如果更改submit,则会阻止表单提交,因此我使用了返回而不是使用if-else语句我尝试使用ternary operation但不幸的是我遇到了错误 {{1 }} 但是我不明白为什么会出现这个错误?三元运算仅用于分配吗?在这方面不确定。以下只是我尝试做的一个示例。

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

5 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:9)

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

returnstatement。它没有评估任何东西。您正在使用ternary expression(a.k.a三元运算符),其语法为

test ? expression1 : expression2
如果条件成立,则

并评估为expression1,否则评估为expression2。这意味着expression1expression2必须自己评估某些内容,而不能是陈述。

从底线开始,您应该使用if

答案 2 :(得分:5)

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

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

答案 3 :(得分:2)

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

考虑一下:

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

现在用以下方法测试:

true

分别评估为false{ "rules": { ".read": "auth != null", ".write": "auth != null", "visits": { "$visit_id": { "mister_id": { ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))" } } } } } 。虽然这在Swift中几乎完全相同,但我已经验证了这个Javascript代码有效。

答案 4 :(得分:-1)

这是具有三元返回的函数

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