How to write an inline IF statement in JavaScript?
如何在javascript中使用内联
像这样:
1 2 3 4 5 6 | var a = 2; var b = 3; if(a < b) { // do something } |
您不一定需要jquery。仅Javascript就可以做到这一点。
1 2 3 | var a = 2; var b = 3; var c = ((a < b) ? 'minor' : 'major'); |
如果值为
这被称为条件(三元)运算符。
https://developer.mozilla.org/en-us/docs/javascript/reference/operators/conditional_operator
有一个三元运算符,如下所示:
1 | var c = (a < b) ?"a is less than b" :"a is not less than b"; |
对于以内联方式编写
1 | if ( a < b ) // code to be executed without curly braces; |
也可以仅使用逻辑运算符来近似if/else。
1 | (a && b) || c |
以上内容大致相同:
1 | a ? b : c |
当然,大致相同:
1 | if ( a ) { b } else { c } |
我大概是说,因为这种方法有一个区别,那就是你必须知道
由于javascripts传递/返回构成逻辑表达式的一个原始值的行为(该值取决于运算符的类型),因此上述操作是可能的。某些其他语言(如PHP)执行操作的实际结果,即"真"或"假",这意味着结果始终是"真"或"假";例如:
1 2 3 4 5 | 14 && 0 /// results as 0, not false 14 || 0 /// results as 14, not true 1 && 2 && 3 && 4 /// results as 4, not true true && '' /// results as '' {} || '0' /// results as {} |
与正常的if语句相比,前两个方法的一个主要优点是可以在参数的右侧操作,即作为赋值的一部分。
1 2 3 4 | d = (a && b) || c; d = a ? b : c; if `a == true` then `d = b` else `d = c` |
用标准if语句实现这一点的唯一方法是复制分配:
1 | if ( a ) { d = b } else { d = c } |
您可能会问为什么只使用逻辑运算符而不使用三元运算符,对于简单的情况,您可能不会这样做,除非您希望确保
在纯英语中,语法解释如下:
1 2 3 4 5 6 | if(condition){ do_something_if_condition_is_met; } else{ do_something_else_if_condition_is_not_met; } |
可以写为:
1 | condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met; |
1 2 3 4 | 8008 1110 parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' ); |
在javascript中可以这样做:
1 | a < b ? passed() : failed(); |
如果只需要一个内联if(不带else),则可以使用逻辑and运算符:
1 | (a < b) && /*your code*/; |
如果您还需要其他操作,请使用其他人建议的三元操作。
我经常需要根据条件运行更多的代码,通过使用:
1 2 3 4 5 | var a = 2; var b = 3; var c = 0; ( a < b ? ( alert('hi'), a=3, b=2, c=a*b ) : ( alert('by'), a=4, b=10, c=a/b ) ); |
仅供参考,您可以编写条件运算符
1 | var a = (truthy) ? 1 : (falsy) ? 2 : 3; |
如果您的逻辑足够复杂,那么您可以考虑使用IIFE
1 2 3 4 5 | var a = (function () { if (truthy) return 1; else if (falsy) return 2; return 3; })(); |
当然,如果您计划多次使用这个逻辑,那么您可以将它封装在一个函数中,以保持事物的美观和干燥。
若要添加此内容,还可以使用带&;&;和运算符的内联if条件。这样地
1 2 3 4 | var a = 2; var b = 0; var c = (a > b || b == 0)?"do something" :"do something else"; |
问题的实质不是:我能写下以下内容吗?
1 2 3 4 | if (foo) console.log(bar) else console.log(foo + bar) |
答案是,是的,上面会翻译。
但是,请注意以下操作
1 2 3 4 5 6 7 | if (foo) if (bar) console.log(foo) else console.log(bar) else console.log(foobar) |
请确保将不明确的代码用大括号括起来,因为上面将引发异常(类似的排列将产生不需要的行为)。