Почему мы не можем вернуть в троичный оператор?

Скажем, у меня простая 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>

Ответ 1

Тернарный оператор вычисляет выражение и выражения не могут содержать оператор return (как это будет выглядеть, если вы должны назначить выражение переменной?). Однако вы можете очень хорошо вернуть результат тернарного оператора, т. return condition? returnValue1: returnValue2; return condition? returnValue1: returnValue2;

На ваш конкретный момент я не понимаю, почему вы хотели бы вернуться. Похоже, вы пытаетесь что-то сделать, только если условие выполнено. Простое утверждение if, вероятно, было бы более адекватным.

Ответ 2

JavaScript (как и многие другие языки) имеет выражения и выражения. Выражение должно оценивать что-то. Оператор выполняет действие. Выражения могут использоваться как утверждения, но обратное неверно.

return - это утверждение. Он ничего не оценивает. Вы используете тройное выражение (aka trernary operator), которое имеет синтаксис

test ? expression1 : expression2

и оценивает expression1 если условие выполнено, и expression2 противном случае. Это означает, что expression1 и expression2 должны сами что-то оценивать и не могут быть операторами.


В нижней строке вы должны использовать 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));

Который оценивает значение true и false соответственно. Хотя это почти идентично в Swift, я проверил, что этот Javascript-код работает.