tak*_*asy 268 javascript if-statement ternary-operator conditional-operator
如何if
在JavaScript中使用内联语句?还有内联else
声明吗?
像这样的东西:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ttW 595
你不一定需要jQuery.只有JavaScript才能做到这一点.
var a = 2;
var b = 3;
var c = ((a < b) ? 'minor' : 'major');
Run Code Online (Sandbox Code Playgroud)
该c
变量将是minor
如果该值true
,并且major
如果该值是false
.
这被称为条件(三元)运算符.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator
und*_*ned 42
对于if
内联编写语句,其中的代码应该只是一个语句:
if ( a < b ) // code to be executed without curly braces;
Run Code Online (Sandbox Code Playgroud)
Mah*_*mal 41
有一个三元运算符,像这样:
var c = (a < b) ? "a is less than b" : "a is not less than b";
Run Code Online (Sandbox Code Playgroud)
Peb*_*bbl 32
您也可以仅使用逻辑运算符来近似if/else.
(a && b) || c
Run Code Online (Sandbox Code Playgroud)
以上内容大致相同:
a ? b : c
Run Code Online (Sandbox Code Playgroud)
当然,大致相同:
if ( a ) { b } else { c }
Run Code Online (Sandbox Code Playgroud)
我粗略地说,因为这种方法存在一个区别,因为你必须知道它的值b
将被评估为真,否则你将永远得到c
.基本上你必须意识到,出现的部分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 {}
Run Code Online (Sandbox Code Playgroud)
与普通的if语句相比,一个主要的好处是前两个方法可以在参数的右侧操作,即作为赋值的一部分.
d = (a && b) || c;
d = a ? b : c;
if `a == true` then `d = b` else `d = c`
Run Code Online (Sandbox Code Playgroud)
使用标准if语句实现此目的的唯一方法是复制分配:
if ( a ) { d = b } else { d = c }
Run Code Online (Sandbox Code Playgroud)
你可能会问为什么只使用逻辑运算符而不是三元运算符,对于你可能不会的简单情况,除非你想确定a
并且b
都是正确的.您还可以使用逻辑运算符实现更简化的复杂条件,使用嵌套的三元运算可能会变得非常混乱......如果您希望代码易于阅读,那么这两者都不是那么直观.
Oni*_*sha 30
用简单的英语,语法解释如下:
if(condition){
do_something_if_condition_is_met;
}
else{
do_something_else_if_condition_is_not_met;
}
Run Code Online (Sandbox Code Playgroud)
可以写成:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
Run Code Online (Sandbox Code Playgroud)
Hyd*_*erA 20
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>
parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
Run Code Online (Sandbox Code Playgroud)
Nah*_*ahn 18
如果您只想要一个内联IF(没有ELSE),您可以使用逻辑AND运算符:
(a < b) && /*your code*/;
Run Code Online (Sandbox Code Playgroud)
如果您还需要ELSE,请使用其他人建议的三元操作.
Iva*_*var 17
嗯,如果你的意思是在JavaScript,那么你可以这样做:
a < b ? passed() : failed();
Run Code Online (Sandbox Code Playgroud)
仅供参考,您可以撰写条件运算符
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
Run Code Online (Sandbox Code Playgroud)
如果您的逻辑足够复杂,那么您可以考虑使用IIFE
var a = (function () {
if (truthy) return 1;
else if (falsy) return 2;
return 3;
})();
Run Code Online (Sandbox Code Playgroud)
当然,如果你计划不止一次使用这个逻辑,那么你应该将它封装在一个函数中以保持良好和干燥.
小智 6
我经常需要在每个条件下运行更多代码,方法是使用:( , , )
多个代码元素可以执行:
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 ) );
Run Code Online (Sandbox Code Playgroud)
内联如果:
(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')
Run Code Online (Sandbox Code Playgroud)
真实结论:假设为真时执行的语句
错误的结论:假设为假时执行的语句
你的例子:
var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Run Code Online (Sandbox Code Playgroud)
您可以使用三元运算符,它相当于简单的 if, else。
三元运算调用两个结果的函数:
(a < b) ? DoSomething() : DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)
三元运算仅针对其中一个结果调用函数:
(a < b) ? DoSomething() : {}; or (a < b)?.DoSomething();
Run Code Online (Sandbox Code Playgroud)