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

说我有一个简单的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; }) 
  

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

在你的具体观点,我不明白你为什么要回来。 看起来你只是在条件得到满足的情况下才会做某事。 一个简单的if语句可能更适合那里。

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

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

 test ? expression1 : expression2 

如果条件成立则计算expression1 ,否则计算expression2 。 这意味着expression1expression2必须自己评估某些东西,而不能是语句。


最重要的是,你应该使用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中几乎完全相同,但我已经validation了这个Javascript代码是有效的。