如何在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 } 

你可能会问为什么只使用逻辑运算符而不是三元运算符 ,对于简单的情况你可能不会,除非你想确保ab都是真的。 你也可以使用逻辑运算符来实现更复杂的条件,使用嵌套的三元运算可能会变得非常混乱……然后如果你希望你的代码易于阅读,那么它们都不是那么直观。

 <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 ) );