Почему мы не можем вернуть в троичный оператор?
Скажем, у меня простая 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-код работает.