如何在JavaScript中编写内联IF语句?
如何在JavaScript中使用内联if
语句? 还有一个内联的else
语句吗?
像这样的东西:
var a = 2; var b = 3; if(a < b) { // do something }
你不一定需要jQuery。 JavaScript本身就可以做到这一点。
var a = 30; var b = 40; var c = ((a < b) ? 2 : 3);
有2个是true
值,3个是false
值。
这被称为有条件(三元)运算符。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator
有一个三元操作符,像这样:
var c = (a < b) ? "a is less than b" : "a is not less than b";
对于写内联语句,其内部的代码应该只是一个语句:
if ( a < b ) // code to be executed without curly braces;
用简单的英语,解释的语法是:
if(condition){ do_something_if_condition_is_met; } else{ do_something_else_if_condition_is_not_met; }
可以写成:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
你也可以使用逻辑运算符来近似一个if / else。
(a && b) || c
上面的说法大致相同:
a ? b : c
当然,大致相同:
if ( a ) { b } else { c }
我粗略地说,因为这种方法有一个区别,因为你必须知道b
的价值将被评估为真实的,否则你总是会得到c
。 基本上你必须认识到, if () { here }
现在出现的部分现在是你放置if ( here ) { }
的条件的一部分。
由于传递/返回形成逻辑expression式的原始值之一的JavaScript行为,上述情况是可能的,这取决于运算符的types。 某些其他语言,比如PHP,会进行实际的操作结果,即真或假,这意味着结果总是正确的或错误的; 例如:
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语句相比,一个主要的好处是前两个方法可以在参数的右边进行操作,即作为赋值的一部分。
d = (a && b) || c; d = a ? b : c; if `a == true` then `d = b` else `d = c`
用一个标准的if语句来达到这个目的的唯一方法就是复制这个assigment:
if ( a ) { d = b } else { d = c }
你可能会问为什么只使用逻辑运算符而不是三元运算符 ,对于简单的情况你可能不会,除非你想确保a
和b
都是真的。 你也可以使用逻辑运算符来实现更复杂的条件,使用嵌套的三元运算可能会变得非常混乱……然后如果你希望你的代码易于阅读,那么它们都不是那么直观。
<div id="ABLAHALAHOO">8008</div> <div id="WABOOLAWADO">1110</div> parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
嗯,如果你的意思是在JavaScript中,那么你可以这样做:
a < b ? /*do something*/ : /*do something else*/;
如果你只是想要一个内联的IF(没有ELSE),你可以使用逻辑AND运算符:
(a < b) && /*your code*/;
如果您还需要ELSE,请使用其他人build议的三元操作。
要添加到这个,你也可以使用内联条件与&&和|| 运营商。 喜欢这个
var a = 2; var b = 0; var c = (a > b || b == 0)? "do something" : "do something else";
仅供参考,您可以撰写有条件的操作员
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
如果你的逻辑足够复杂,那么你可以考虑使用一个IIFE
var a = (function () { if (truthy) return 1; else if (falsy) return 2; return 3; })();
当然,如果你打算不止一次地使用这个逻辑,那么你可以把它封装在一个函数中,以保持事情的好和干。
问题本质上不是问题吗?我可以写下面的内容吗?
if (foo) console.log(bar) else console.log(foo + bar)
答案是,是的,上面会翻译。
但是,要小心以下几点
if (foo) if (bar) console.log(foo) else console.log(bar) else console.log(foobar)
一定要将不明确的代码包装在大括号中,因为上面的代码会抛出exception(类似的排列会产生不希望的行为)。
我经常需要运行更多的代码,通过使用:( ( , , )
多个代码元素可以执行:
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 ) );