345

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

像这样的东西:

var a = 2;
var b = 3;

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

17 回答 17

755

你不一定需要 jQuery。仅 JavaScript 就可以做到这一点。

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

如果值为,则c变量将为,如果值为。minortruemajorfalse


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

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator

于 2012-04-22T17:40:35.797 回答
52

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

var c = (a < b) ? "a is less than b"  : "a is not less than b";
于 2012-04-22T17:40:50.290 回答
50

对于if内联编写语句,其中的代码应该只有一个语句:

if ( a < b ) // code to be executed without curly braces;
于 2012-04-22T17:43:14.027 回答
43

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

(a && b) || c

上面说的大致相同:

a ? b : c

当然,大致与以下内容相同:

if ( a ) { b } else { c }

我粗略地说是因为这种方法有一个区别,因为您必须知道 的值b将评估为真,否则您将始终得到c. 基本上你必须意识到,if () { here }现在出现的部分是你所放置的条件的一部分if ( here ) { }

由于 JavaScript 传递/返回形成逻辑表达式的原始值之一的行为,上述情况是可能的,这取决于运算符的类型。某些其他语言,如 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两者都是真的。您还可以使用逻辑运算符实现更简化的复杂条件,使用嵌套的三元运算可能会变得非常混乱......再一次,如果您希望您的代码易于阅读,那么两者都不是那么直观。

于 2013-11-04T10:02:41.147 回答
35

用简单的英语,语法解释:

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;
于 2013-05-10T08:24:01.577 回答
26

如果您只想要一个内联 IF(没有 ELSE),您可以使用逻辑 AND 运算符:

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

如果您还需要 ELSE,请使用其他人建议的三元运算。

于 2015-07-14T03:51:17.050 回答
21

你可以在 JavaScript 中这样做:

a < b ? passed() : failed();
于 2012-04-22T17:40:29.227 回答
21
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
于 2012-04-22T17:44:18.303 回答
8

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

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

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

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

当然,如果您打算多次使用此逻辑,那么您应该将其封装在一个函数中以保持良好和干燥。

于 2016-08-01T20:58:51.957 回答
8

我经常需要在每个条件下运行更多代码,方法是使用:( , , )多个代码元素可以执行:

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 ) );
于 2017-08-31T08:15:25.420 回答
5

内联如果:

(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')

真实结论:假设为真时执行的语句

错误结论:假设为假时执行的语句

你的例子:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
于 2020-06-04T18:15:12.060 回答
3

要添加到这一点,您还可以使用带有 && 和 || 的内联 if 条件。运营商。像这样

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";
于 2013-10-10T06:37:51.597 回答
2

JavaScript 中的内联if很简单,不需要大括号:

if (a < b) doSomething()

从技术上讲,您可以else在同一行中有一个,但它需要一个分号:

if (a < b) doSomething(); else doSomethingElse()

您的团队的编码标准可能不希望使用上述示例。最重要的是您遵循适用于您的团队的约定。就个人而言,if在许多情况下,我更喜欢语句而不是三元组,因为我发现它们更容易阅读。

于 2021-09-27T22:02:01.477 回答
1

简化三元运算符

var locked = 1;
var canChange = locked != 1 ? true : false;

如果 locked 为 1,则canChange变量设置为false,否则设置为 true。在这种情况下,您可以使用布尔表达式来简化它,如下所示:

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 语句,则不应使用三元运算符。

于 2021-05-21T07:01:45.233 回答
0

本质上不是问题:我可以写以下内容吗?

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)

确保将模棱两可的代码包含在大括号中,因为上面会引发异常(并且类似的排列会产生不希望的行为。)

于 2015-07-16T14:42:17.677 回答
0

(健康)状况) ?表达式真:表达式假;

例子

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";
于 2022-02-26T08:07:29.233 回答
0

您可以使用三元运算符,它等同于简单的 if 和 else。

为两种结果调用函数的三元运算:

(a < b) ? DoSomething() : DoSomethingElse();

三元运算仅针对其中一个结果调用函数:

(a < b) ? DoSomething() : {};
于 2022-03-04T11:54:24.123 回答