你怎么用的? :JavaScript中的(条件)运算符?

时间:2011-06-07 02:10:54

标签: javascript ternary-operator

有人可以用简单的词语向我解释什么是?:(有条件的,“三元”)运算符以及如何使用它?

18 个答案:

答案 0 :(得分:534)

这是if-else语句的单行速记。它被称为条件运算符。 1

以下是可以使用条件运算符缩短的代码示例:

if(userIsYoungerThan21) {
  serveGrapeJuice();
}
else {
  serveWine();
}

这可以通过?:缩短,如下所示:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

在Javascript中,条件运算符可以计算表达式,而不仅仅是语句:

var userType = userIsYoungerThan18 ? "Minor" : "Adult";
serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");

他们甚至可以被链接:

userIsYoungerThan4 ? serveMilk() : userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

但是要小心,否则你最终会得到这样的复杂代码:

var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;

1 通常称为“三元运算符”,但事实上它只是一个三元运算符[一个接受三个运算符的运算符]。不过,它是目前唯一拥有的JavaScript。

答案 1 :(得分:109)

我想添加一些给定的答案。

如果您遇到(或想要使用)三元组的情况,例如“显示变量(如果已设置,否则......)”,您可以缩短它,没有三元

而不是:

var welcomeMessage  = 'Hello ' + (username ? username : 'guest');

您可以使用:

var welcomeMessage  = 'Hello ' + (username || 'guest');

这是Javascripts等效的PHP的简写三元运算符?:

甚至:

var welcomeMessage  = 'Hello ' + (username || something || maybethis || 'guest');

它评估变量,如果它是假的或未设置,它继续下一个。

答案 2 :(得分:25)

它被称为“三元”或“条件”运算符。

示例

  

?:运算符可以用作   if ... else语句的快捷方式。   它通常用作a的一部分   更大的表达式,其中if ... else   声明会很尴尬。对于   例如:

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");
  

该示例创建一个字符串   包含“晚上好”。如果是   下午6点之后。等效代码使用   if ... else语句看起来像   如下:

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

来自MSDN JS documentation

基本上它是一种速记条件陈述。

另见:

答案 3 :(得分:18)

当你所拥有的只是符号时谷歌有点困难;)使用的术语是“javascript条件运算符”。

如果您在Javascript中看到更多有趣的符号,您应该首先尝试查找Javascript的运算符:MDC's list of operators。您可能遇到的一个例外是$ symbol

要回答您的问题,条件运算符会替换简单的if语句。一个例子是最好的:

var insurancePremium = age > 21 ? 100 : 200;

而不是:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}

答案 4 :(得分:8)

z = (x == y ? 1 : 2);

相当于

if (x == y)
    z = 1;
else
    z = 2;

当然,除了它更短。

答案 5 :(得分:6)

三元运营商

通常我们在Javascript中有条件语句。

示例:

if (true) {
    console.log(1)
} 
else {
    console.log(0)
}
# Answer
# 1

但它包含两行或更多行,无法分配给变量。 Javascript为此问题三元运算符提供了解决方案。 三元运算符可以在一行中写入并分配给变量。

示例:

var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1

这个三元运算符在C编程语言中是相似的。

答案 6 :(得分:5)

它被称为三元运算符

tmp = (foo==1 ? true : false);

答案 7 :(得分:5)

嘿伙伴只记得js通过评估真或假来工作,对吧?

让我们选择三元运营商:

questionAnswered ? "Awesome!" : "damn" ;

首先,js会检查questionAnswered是true还是false

如果true?),您将获得"太棒了!"

否则(:)你会得到"该死的&#34 ;;

希望这有助于朋友:)

答案 8 :(得分:3)

大多数答案是正确的,但我想补充一点。 三元运算符是右关联的,这意味着它可以通过以下if … else if … else if … else方式被链接

function example() {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

等同于:

function example() {
    if (condition1) { return value1; }
    else if (condition2) { return value2; }
    else if (condition3) { return value3; }
    else { return value4; }
}

更多详细信息为here

答案 9 :(得分:2)

一行if statement

所以

var x=1;
(x == 1) ? y="true" : y="false";
alert(y);

要评估的表达式位于( )

如果匹配为true,请执行?

之后的代码

如果匹配为false,请执行:

之后的代码

答案 10 :(得分:2)

x = 9
y = 8

一元

++x
--x

二进制

z = x + y

三元

2>3 ? true : false;
2<3 ? true : false;
2<3 ? "2 is lesser than 3" : "2 is greater than 3";

答案 11 :(得分:1)

它被称为ternary operator。有关更多信息,这是我回答的另一个问题:

How to write an IF else statement without 'else'

答案 12 :(得分:1)

我们可以使用Jquery以及长度,如下例所示:

假设我们有一个具有值的GuarantorName文本框,并且想要获取名字和姓氏-它可能为null。 比

        var gnamesplit = $("#txtGuarantorName").val().split(" ");
        var gLastName = "";
        var gFirstName = "";
        if(gnamesplit.length > 0 ){
           gLastName  = gnamesplit[0];        
        }
        if(gnamesplit.length > 1 ){
           gFirstName = gnamesplit[1];        
        }

我们可以将以下代码与带有最少代码的Jquery一起使用

    

    var gnamesplit = $("#txtGuarantorName").val().split(" ");
    var gLastName = gnamesplit.length > 0  ? gnamesplit[0] : "";
    var gFirstName =  gnamesplit.length > 1  ? gnamesplit[1] : "";
    $("#txtLastName").val(gLastName);
    $("#txtFirstName").val(gFirstName);
    
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div >
  Guarantor Name: <input type="text" id="txtGuarantorName" value="ASP.NET Core"  /><br/>
  <br/>
  <br/>
  
  First Name: <input type="text" id="txtLastName" value="ASP.NET Core"  />
  Last Name: <input type="text" id="txtFirstName" value="ASP.NET Core"  />
</div>

答案 13 :(得分:1)

这可能不是最优雅的方法。但是对于不熟悉三元运算符的人,这可能会有用。我个人的喜好是执行1线后备广告,而不是使用条件阻止广告。

  // var firstName = 'John'; // Undefined
  var lastName = 'Doe';

  // if lastName or firstName is undefined, false, null or empty => fallback to empty string
  lastName = lastName || '';
  firstName = firstName || '';

  var displayName = '';

  // if lastName (or firstName) is undefined, false, null or empty
  // displayName equals 'John' OR 'Doe'

  // if lastName and firstName are not empty
  // a space is inserted between the names
  displayName = (!lastName || !firstName) ? firstName + lastName : firstName + ' ' + lastName;


  // if display name is undefined, false, null or empty => fallback to 'Unnamed'
  displayName = displayName || 'Unnamed';

  console.log(displayName);

Ternary Operator

答案 14 :(得分:0)

如果您在 javascript 中具有一个条件检查实例功能。 三元运算符很容易使用。只需一行即可实施。 例如:

    private module : string ='';
    private page:boolean = false;
    async mounted(){
     if(this.module=== 'Main')
    {
    this.page = true;}
    else{
    this.page = false;
    }
}

这样具有一个条件的函数可以写成如下。

this.page = this.module=== 'Main' ?true:false;

条件?如果为真:如果为假

答案 15 :(得分:0)

三元表达式在JS中非常有用,尤其是React。这是对所提供的许多优质详细信息的简化答案。

condition ? expressionIfTrue : expressionIfFalse

expressionIfTrue视为OG if陈述式为true;
expressionIfFalse视为else语句。

示例:

var x = 1;
(x == 1) ? y=x : y=z;

这将检查x的值,如果为true,则返回第一个y =(value),如果为false,则返回第二个冒号:返回y =(value)。

答案 16 :(得分:0)

  

条件(三元)运算符是唯一的JavaScript运算符   需要三个操作数。此运算符经常用作   if语句的快捷方式。

condition ? expr1 : expr2 
  

如果条件为true,则运算符返回expr1的值;否则,返回0。   否则,它将返回expr2的值。

function fact(n) {
  if (n > 1) {
    return n * fact(n-1);
  } else {
    return 1;
  }
  // we can replace the above code in a single line of code as below
  //return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));

有关更多说明,请阅读MDN document link

答案 17 :(得分:-3)

 (sunday == 'True') ? sun="<span class='label label-success'>S</span>" : sun="<span class='label label-danger'>S</span>";

 sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"