如何在JavaScript中使用三目运算符?

525
< p >什么是?:(问号和冒号运算符,又称条件或“三元”)运算符,我该如何使用它?< /p >

8
趣闻:一些编程语言(比如Groovy)实际上有一个操作符?:(与你所写的一样,两边没有语句)——Elvis运算符。相当聪明。 - Rob Hruska
1
可能是重复的问题:javascript if alternative - Rob Hruska
20个回答

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";

1

这是一行代码中的if语句

所以

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

要评估的表达式在 ( ) 中。

如果匹配为 true,则执行 ? 后面的代码。

如果匹配为 false,则执行 : 后面的代码。


var x=1; y = (x == 1) ? true : false; 变量 x 等于 1; 如果 x 等于 1,则 y 为真,否则为假; - augurone

1

使用三元运算符,编写一个程序,如果数字是偶数,则打印“Even Number”,如果数字是奇数,则打印“Odd Number”。

let a = 13;
let b = a%2!==0 ? "is Odd number" : "is Even number";
// let b = a%2==0 ? "is Even number" : "is Odd number";
console.log(a+" "+b);

输出:13是奇数


1

三元运算符只是一种简单的编写if else条件语句的方式。它在ReactJS中被广泛使用。

例如:

const x = 'foo';

// Instead of if else use this
x === 'foo' ? alert('True') : alert('False');

// Output
// alert box will prompt 'True'


由于当前的写法,你的回答不够清晰。请进行[编辑]添加更多细节,以帮助他人了解如何回答问题。你可以在帮助中心找到有关编写好答案的更多信息。 - Community

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);

三元运算符


1
条件(三元)运算符是JavaScript中唯一接受三个操作数的运算符。该运算符通常用作if语句的快捷方式。
condition ? expr1 : expr2 

如果条件为真,则运算符返回expr1的值;否则,它返回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文档链接


1
我们可以使用Jquery来获取长度,示例如下:
假设我们有一个名为GuarantorName的文本框,其中包含值,我们想要获取名字和姓氏-它可能为空。因此,不是
        var gnamesplit = $("#txtGuarantorName").val().split(" ");
        var gLastName = "";
        var gFirstName = "";
        if(gnamesplit.length > 0 ){
           gLastName  = gnamesplit[0];        
        }
        if(gnamesplit.length > 1 ){
           gFirstName = gnamesplit[1];        
        }

We can use below code with Jquery with minimum code

    

    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>


1
如果你在 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;

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


1
最好直接返回 this.page = this.module === 'Main',因为它已经是一个布尔值了。 - konsumer

0

5
实际上,"ternary" 是一种操作符的类型(即它有三部分)。那个特定的 ternary 操作符的名称是"条件操作符"。在 JS 中只有一个 ternary 操作符,所以这些术语被误用了。 - iCollect.it Ltd

-4
 (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>"

你可以使用三元运算符附加HTML。 - Chandrashekhar Komati
这真的不是你应该编写三元赋值的方式,而且要使用 === 而不是 ==,否则你可能就只需要做 sunday ?。应该是 sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>" - TheRealMrCrowley
三元条件运算符的整个意义在于缩短条件赋值的值,否则你应该使用if语句。 - TheRealMrCrowley
现在告诉我这个是正确的还是不正确的。如果你说错了,那么它仍然可以工作,我正在使用它在我的项目中。 - Chandrashekhar Komati
如果你写了 sunday == 'True',并且sunday实际上等于 'False',那么这个条件语句仍然会被评估为 true。因为'True' == 'False'true,但是 'True' === 'False'false - TheRealMrCrowley
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接