如何在JavaScript中使用内联if语句?是否也有内联else语句?
if
else
就像这样:
var a = 2; var b = 3; if(a < b) { // do something }
你可以在JavaScript中这样做:
a < b ? passed() : failed();
你不一定需要jQuery。JavaScript本身就可以做到这一点。
var a = 2; var b = 3; var c = ((a < b) ? 'minor' : 'major');
如果值为true,则c变量将为minor,如果值为false,则major。
true
c
minor
false
major
这被称为条件(三元)运算符。
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语句,其中的代码应该只有一个语句:
if ( a < b ) // code to be executed without curly braces;
<div id="ABLAHALAHOO">8008</div> <div id="WABOOLAWADO">1110</div> parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
用简单的英语,语法解释如下:
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;
var a = 2; var b = 0; var c = (a > b || b == 0)? "do something" : "do something else";
也可以只使用逻辑运算符来近似if/else。
(a && b) || c
这句话大致相当于说:
a ? b : c
当然,大致和:
if ( a ) { b } else { c }
我说“大致”是因为这种方法有一个不同之处,即你必须知道b的值将被计算为true,否则你总是会得到c。基本上,你必须意识到出现if () { here }的部分现在是你放置if ( here ) { }的条件的一部分。
b
if () { here }
if ( here ) { }
上述情况是可能的,因为JavaScripts的行为是传递/返回一个形成逻辑表达式的原始值,这取决于操作符的类型。某些其他语言,如PHP,执行操作的实际结果,即true或false,这意味着结果总是true或false;例句:
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语句实现这一点的唯一方法是复制赋值:
if ( a ) { d = b } else { d = c }
你可能会问为什么只使用逻辑运算符而不是三元运算符,对于简单的情况,你可能不会这样做,除非你想确保a和b都为真。您还可以使用逻辑操作符实现更精简的复杂条件,使用嵌套的三元操作可能会变得相当混乱……如果你想让你的代码易于阅读,这两种方法都不是那么直观。
a
如果你只是想要一个内联If(没有ELSE),你可以使用逻辑AND运算符:
(a < b) && /*your code*/;
如果还需要ELSE,则使用其他人建议的三元操作。
这个问题本质上不是:我能写出下面的东西吗?
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)
请务必将模棱两可的代码用大括号括起来,因为上述代码将抛出异常(类似的排列将产生不希望看到的行为)。
供你参考,你可以编写有条件的运营商
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
如果你的逻辑足够复杂,那么你可以考虑使用IIFE
var a = (function () { if (truthy) return 1; else if (falsy) return 2; return 3; })();
当然,如果你计划使用这个逻辑不止一次,那么你必须把它封装在一个函数中,以保持它的美观和DRY。
我经常需要在每个条件下运行更多的代码,通过使用:( , , )多个代码元素可以执行:
( , , )
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 ) );
内联如果:
(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')
真结论:当假设为真时执行的陈述
谬误结论:当假设为假时执行的陈述
你的例子:
var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
简化三元运算符
var locked = 1; var canChange = locked != 1 ? true : false;
如果locked为1,则canChange变量被设置为false,否则,它被设置为true。 在这种情况下,您可以使用如下布尔表达式来简化它:
canChange
var locked = 1; var canChange = locked != 1;
用于多个JavaScript三元运算符 下面的例子展示了如何在同一个表达式中使用两个三元运算符:
var speed = 90; var message = speed >= 120 ? 'Too Fast' : (speed >= 80 ? 'Fast' : 'OK'); console.log(message);
当三元运算符使代码更易于阅读时,使用它是一种最佳实践。如果逻辑包含很多If…Else语句,你不应该使用三元操作符。
JavaScript中的内联if很简单,不需要大括号:
if (a < b) doSomething()
从技术上讲,你可以在同一行中有else,但它需要一个分号:
if (a < b) doSomething(); else doSomethingElse()
您的团队的编码标准可能不需要上面的示例。最重要的是你要遵循适合你的团队的惯例。就我个人而言,在许多情况下,我更喜欢if语句而不是三元语句,因为我发现它们更容易阅读。
(条件)?expressionTrue: expressionFalse;
例子
int a=20, b=10; if (a>b) { cout << "a greater than b"; } else { cout << "b greater than a"; }
你可以简单地写:
int a=20, b=10; (a>b) ? cout << "a greater than b" : cout << "b greater than a";
你可以使用三元运算符,它等同于一个简单的if, else。
三元操作,调用两个结果的函数:
(a < b) ? DoSomething() : DoSomethingElse();
三元运算,只对其中一个结果调用函数:
(a < b) ? DoSomething() : {}; or (a < b)?.DoSomething();