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

How to write an inline IF statement in JavaScript?

如何在javascript中使用内联if语句?是否也有内联else语句?

像这样:

1
2
3
4
5
6
var a = 2;
var b = 3;

if(a < b) {
    // do something
}


您不一定需要jquery。仅Javascript就可以做到这一点。

1
2
3
var a = 2;
var b = 3;    
var c = ((a < b) ? 'minor' : 'major');

如果值为truec变量将为minor;如果值为falsemajor变量将为minor

这被称为条件(三元)运算符。

https://developer.mozilla.org/en-us/docs/javascript/reference/operators/conditional_operator


有一个三元运算符,如下所示:

1
var c = (a < b) ?"a is less than b"  :"a is not less than b";


对于以内联方式编写if语句,其中的代码只能是一条语句:

1
if ( a < b ) // code to be executed without curly braces;

也可以仅使用逻辑运算符来近似if/else。

1
(a && b) || c

以上内容大致相同:

1
a ? b : c

当然,大致相同:

1
if ( a ) { b } else { c }

我大概是说,因为这种方法有一个区别,那就是你必须知道b的值将被评估为真,否则你总是得到c。基本上,你必须认识到,出现在if () { here }上的部分现在是你放置if ( here ) { }的条件的一部分。

由于javascripts传递/返回构成逻辑表达式的一个原始值的行为(该值取决于运算符的类型),因此上述操作是可能的。某些其他语言(如PHP)执行操作的实际结果,即"真"或"假",这意味着结果始终是"真"或"假";例如:

1
2
3
4
5
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语句相比,前两个方法的一个主要优点是可以在参数的右侧操作,即作为赋值的一部分。

1
2
3
4
d = (a && b) || c;
d = a ? b : c;

if `a == true` then `d = b` else `d = c`

用标准if语句实现这一点的唯一方法是复制分配:

1
if ( a ) { d = b } else { d = c }

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


在纯英语中,语法解释如下:

1
2
3
4
5
6
if(condition){
    do_something_if_condition_is_met;
}
else{
    do_something_else_if_condition_is_not_met;
}

可以写为:

1
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;


1
2
3
4
8008
1110

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );


在javascript中可以这样做:

1
a < b ? passed() : failed();

如果只需要一个内联if(不带else),则可以使用逻辑and运算符:

1
(a < b) && /*your code*/;

如果您还需要其他操作,请使用其他人建议的三元操作。


我经常需要根据条件运行更多的代码,通过使用:( , , )多个代码元素可以执行:

1
2
3
4
5
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 ) );

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

1
var a = (truthy) ? 1 : (falsy) ? 2 : 3;

如果您的逻辑足够复杂,那么您可以考虑使用IIFE

1
2
3
4
5
var a = (function () {
  if (truthy) return 1;
  else if (falsy) return 2;
  return 3;
})();

当然,如果您计划多次使用这个逻辑,那么您可以将它封装在一个函数中,以保持事物的美观和干燥。


若要添加此内容,还可以使用带&;&;和运算符的内联if条件。这样地

1
2
3
4
var a = 2;
var b = 0;

var c = (a > b || b == 0)?"do something" :"do something else";


问题的实质不是:我能写下以下内容吗?

1
2
3
4
if (foo)
  console.log(bar)
else
  console.log(foo + bar)

答案是,是的,上面会翻译。

但是,请注意以下操作

1
2
3
4
5
6
7
if (foo)
  if (bar)
    console.log(foo)
  else
    console.log(bar)
else
  console.log(foobar)

请确保将不明确的代码用大括号括起来,因为上面将引发异常(类似的排列将产生不需要的行为)。