如何在JavaScript中编写内联IF语句?

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

  • 它说明了如何使用内联IF,它可以完全回答问题. (57认同)
  • 需要注意的是,在这种情况下所有的parens都是可选的.通常是个人偏好/编码风格决定何时使用它们. (22认同)
  • @khany,这是一个JavaScript问题.表达式可能以不同的方式评估其他语言. (3认同)
  • @MattW这不显示如何使用内联IF,它显示如何使用IF ELSE (2认同)

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)

  • 它们甚至不必是函数调用......`0 <1:5:120;`是一个完全有效的语句.但是,除非你的每条线路付费,否则有点无用. (7认同)
  • 它实际上不必分配给任何东西.右侧元素可以简单地是函数调用. (3认同)

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都是正确的.您还可以使用逻辑运算符实现更简化的复杂条件,使用嵌套的三元运算可能会变得非常混乱......如果您希望代码易于阅读,那么这两者都不是那么直观.

  • 在不使用`if .. else ..`的情况下赞美这个想法.http://qr.ae/RwmrBb (3认同)

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)

  • 没有"else"声明是否可以这样做?即`条件?TRUE` (5认同)
  • 哦.所以没有else语句就不可能做到这一点. (5认同)
  • 是的,但 else 部分不能完全省略。至少`: false` 或`: ""` 应该在那里,因为javascript 正在期待这一点。 (2认同)

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)

  • 我甚至不知道我刚刚读到的内容,但我笑得很开心. (42认同)

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)


ala*_*lan 6

仅供参考,您可以撰写条件运算符

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)


Sam*_*mmy 6

内联如果:

(('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)


dav*_*e88 5

您可以使用三元运算符,它相当于简单的 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)