Làm thế nào để bạn sử dụng? : Toán tử (có điều kiện) trong JavaScript?


434

Ai đó có thể vui lòng giải thích cho tôi bằng những từ đơn giản ?:toán tử (có điều kiện, "ternary") là gì và làm thế nào để sử dụng nó?


2
Đó là những nhà khai thác. Các toán hạng là các giá trị bạn sử dụng các toán tử này.
BoltClock

7
Sự thật thú vị: một số ngôn ngữ (cụ thể là Groovy ) thực sự có toán hạng ?:(như bạn đã viết, không có câu lệnh nào giữa) - toán tử Elvis . Khá thông minh.
Rob Hruska

có thể trùng lặp javascript nếu thay thế
Rob Hruska

3
Các biểu tượng của Google có thể có vấn đề, nhưng làm thế nào về việc "nhân viên vận hành Javascript" của Google (và tìm hiểu tất cả)?
nnnnnn

kiểm tra mục wiki này en.wikipedia.org/wiki/Elvis_operator
Nerdroid

Câu trả lời:


644

Đây là một tốc ký một dòng cho một câu lệnh if-other. Nó được gọi là toán tử có điều kiện. 1

Dưới đây là một ví dụ về mã có thể được rút ngắn với toán tử điều kiện:

var userType;
if (userIsYoungerThan18) {
  userType = "Minor";
} else {
  userType = "Adult";
}

if (userIsYoungerThan21) {
  serveDrink("Grape Juice");
} else {
  serveDrink("Wine");
}

Điều này có thể được rút ngắn với ?:như vậy:

var userType = userIsYoungerThan18 ? "Minor" : "Adult";

serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");

Giống như tất cả các biểu thức, toán tử điều kiện cũng có thể được sử dụng như một câu lệnh độc lập với các tác dụng phụ, mặc dù điều này là bất thường bên ngoài việc thu nhỏ:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

Họ thậm chí có thể bị xiềng xích:

serveDrink(userIsYoungerThan4 ? 'Milk' : userIsYoungerThan21 ? 'Grape Juice' : 'Wine');

Tuy nhiên, hãy cẩn thận, hoặc bạn sẽ kết thúc với mã phức tạp như thế này:

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

1 Thường được gọi là "toán tử ternary", nhưng thực tế nó chỉ là một toán tử ternary [một toán tử chấp nhận ba toán hạng]. Tuy nhiên, đây là mã JavaScript duy nhất hiện có.


56
Chỉ cần làm rõ tên: ternaryloại toán tử (tức là nó có 3 phần). Tên của toán tử ternary cụ thể đóconditional operator. Chỉ có một toán tử tạm thời trong JS để các thuật ngữ bị sử dụng sai.
Mã hóa

1
@tryingToGetProgrammingSttern ternary form về mặt kỹ thuật là một biểu thức và các biểu thức có thể chứa các biểu thức khác để tạo thành cây biểu thức. mã đó đúng là một cây biểu thức trông như thế nào :) xem: fsharpforfunandprofit.com/posts/expressions-vs-statements
Alexander Troup

1
Rất khuyến khích cập nhật ví dụ cho trường hợp sử dụng chung, không phải là trường hợp sử dụng tác dụng phụ thường được trích dẫn là lạm dụng của nhà điều hành.
TJ Crowder

7
Không chắc chắn tại sao có một chút ngữ pháp ở phía dưới, nhưng nó không chính xác. Nếu javascript chỉ có 1 trong số một loại toán tử, thì điều đó hoàn toàn chính xác khi nói toán tử ternary chứ không phải toán tử ternary ... Nói "toán tử ternary này là toán tử ternary trong javascript (và nó là duy nhất)" ngớ ngẩn, chỉ cần sử dụng THE và nó ngụ ý tất cả điều đó.
Andrew

1
@MarkCarpenterJr Trong JavaScript cách điển hình để làm điều đó là với ||toán tử, vì nó bị đoản mạch nếu giá trị bên trái là trung thực.
Peter Olson

142

Tôi muốn thêm một số câu trả lời.

Trong trường hợp bạn gặp phải (hoặc muốn sử dụng) một con chim nhạn trong tình huống như 'hiển thị một biến nếu nó được đặt, nếu không ...', bạn có thể làm cho nó ngắn hơn, mà không cần một con chim nhạn .


Thay vì:

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

Bạn có thể dùng:

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

Đây là Javascripts tương đương với toán tử viết tắt của PHP ?:

Hoặc thậm chí:

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

Nó đánh giá biến và nếu nó sai hoặc không được đặt, nó sẽ chuyển sang biến tiếp theo.


4
Tôi đã vật lộn với chim nhạn và cuối cùng tìm thấy câu trả lời này. Cảm ơn bạn!
Ljubisa Livac

Nếu tôi không sử dụng niềng răng xung quanh toán tử ternary trong 'Hello ' + (username ? username : 'guest'), Hello + nếu bị bỏ qua và chỉ kết quả của hoạt động ternary được trả lại. Bất cứ ai có thể giải thích tại sao?
Shiva

2
@Shiva Không có nước lợ, nó đánh giá toàn bộ phần bên trái : 'Hello ' + username, luôn luôn true, bởi vì đó là một chuỗi có độ dài lớn hơn 0.
Jeffrey Roosendaal

26

Nó được gọi là toán tử 'ternary' hoặc 'có điều kiện'.

Thí dụ

Toán tử ?: Có thể được sử dụng làm lối tắt cho câu lệnh if ... other. Nó thường được sử dụng như một phần của biểu thức lớn hơn trong đó một câu lệnh if ... khác sẽ gây khó xử. Ví dụ:

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

Ví dụ này tạo ra một chuỗi chứa "Chào buổi tối." nếu là sau 6 giờ tối. Mã tương đương sử dụng câu lệnh if ... other sẽ như sau:

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

Từ tài liệu MSDN JS .

Về cơ bản đó là một tuyên bố có điều kiện tốc ký.

Cũng thấy:


5
Nó thực sự được gọi là toán tử có điều kiện.
ChaosPandion

5
Đây là một nhà điều hành có điều kiện ternary
Petah

4
@ Michael - Xin xem phần 11,12 Conditional Operator: (?) Của đặc tả: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
ChaosPandion

7
Có phải mọi người vẫn đang tranh cãi về những thứ này? Trời ạ.
BoltClock

7
@BoltClock - Không tranh luận chính xác, chỉ đơn giản là cố gắng bình thường hóa từ vựng thiết yếu của chúng tôi.
ChaosPandion

21

Google hơi khó khăn khi tất cả những gì bạn có là biểu tượng;) Các thuật ngữ để sử dụng là "toán tử điều kiện javascript".

Nếu bạn thấy bất kỳ biểu tượng hài hước nào nữa trong Javascript, trước tiên bạn nên thử tìm kiếm các toán tử của Javascript: danh sách các toán tử của MDC . Một ngoại lệ bạn có thể gặp phải là $biểu tượng .

Để trả lời câu hỏi của bạn, các toán tử có điều kiện thay thế các câu lệnh if đơn giản. Một ví dụ là tốt nhất:

var insurancePremium = age > 21 ? 100 : 200;

Thay vì:

var insurancePremium;

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

Giải thích tốt, nhưng ví dụ là kém vì nó đang gán một giá trị boolean tùy thuộc vào kết quả của biểu thức boolean, điều này rất ít có ý nghĩa. Bạn muốn sử dụng var olderThan20 = age > 20;thay thế.
BalusC

@BalusC - vâng :) Tôi nhận ra điều đó, nhưng ví dụ rất khó để lấy ra khỏi mũ của tôi! Sẽ nghĩ về một thứ tốt hơn ...
David Tang

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

tương đương với

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

ngoại trừ, tất nhiên, nó ngắn hơn.


7

Hầu hết các câu trả lời đều đúng nhưng tôi muốn thêm ít hơn. Các nhà điều hành ternary là phải kết hợp, mà có nghĩa là nó có thể được xích theo cách sau if … else-if … else-if … else:

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

Tương đương với:

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

Chi tiết tại đây


1
Đây là những gì tôi đang tìm kiếm.
Sazal Das


6

Toán tử Ternary

Thông thường chúng ta có các câu điều kiện trong Javascript.

Thí dụ:

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

nhưng nó chứa hai hoặc nhiều dòng và không thể gán cho một biến. Javascript có một giải pháp cho vấn đề này Toán tử Ternary . Toán tử Ternary có thể viết trong một dòng và gán cho một biến.

Thí dụ:

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

Toán tử Ternary này tương tự trong ngôn ngữ lập trình C.


5

Hey mate chỉ cần nhớ js hoạt động bằng cách đánh giá là đúng hoặc sai, phải không?

chúng ta hãy lấy một toán tử ternary:

questionAnswered ? "Awesome!" : "damn" ;

Đầu tiên, js kiểm tra xem câu hỏi có truehay khôngfalse .

nếu true(? ) bạn sẽ nhận được "Tuyệt vời!"

khác ( : ) bạn sẽ nhận được "chết tiệt";

Hy vọng điều này sẽ giúp bạn :)


2

Đó là một if statement tất cả trên một dòng.

Vì thế

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

Biểu thức được đánh giá là trong ( )

Nếu nó đúng, thực thi mã sau ?

Nếu nó khớp sai, thực thi mã sau :


var x = 1; y = (x == 1)? đúng sai;
augurone

2
x = 9
y = 8

đơn phương

++x
--x

Nhị phân

z = x + y

Chim nhạn

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

1

Nó được gọi là ternary operator. Để biết thêm thông tin, đây là một câu hỏi khác tôi đã trả lời về điều này:

Làm thế nào để viết một câu lệnh IF khác mà không có 'khác'


4
Trên thực tế ternary là loại toán tử (tức là nó có 3 phần). Tên của toán tử ternary cụ thể đóconditional operator. Chỉ có một toán tử tạm thời trong JS để các thuật ngữ bị sử dụng sai.
Mã hóa

1

Đây có lẽ không phải là cách thanh lịch nhất để làm điều này. Nhưng đối với một người không quen thuộc với các nhà khai thác ternary, điều này có thể hữu ích. Sở thích cá nhân của tôi là làm dự phòng 1 lớp thay vì khối điều kiện.

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

Toán tử Ternary


1

Chúng ta có thể sử dụng với Jquery cũng như độ dài như ví dụ dưới đây:

Giả sử chúng ta có hộp văn bản ProvorName có giá trị và muốn lấy tên và họ - nó có thể là null. Vì vậy, rathar hơn

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

Chúng tôi có thể sử dụng mã dưới đây với Jquery với mã tối thiểu

    

    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

Các biểu thức ternary rất hữu ích trong JS, đặc biệt là React. Đây là một câu trả lời đơn giản cho nhiều câu hỏi hay, chi tiết được cung cấp.

condition ? expressionIfTrue : expressionIfFalse

Hãy nghĩ về expressionIfTrueOG nếu câu lệnh hiển thị đúng;
nghĩ về expressionIfFalsenhư tuyên bố khác.

Thí dụ:

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

cái này kiểm tra giá trị của x, giá trị y = (giá trị) đầu tiên được trả về nếu đúng, giá trị thứ hai sau dấu hai chấm: trả về y = (giá trị) nếu sai.


0

Toán tử có điều kiện (ternary) là toán tử JavaScript duy nhất có ba toán hạng. Toán tử này thường được sử dụng làm lối tắt cho câu lệnh if.

condition ? expr1 : expr2 

Nếu điều kiện là đúng, toán tử trả về giá trị của expr1; mặt khác, nó trả về giá trị của 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));

Để làm rõ hơn xin vui lòng đọc liên kết tài liệu MDN


0

Nếu bạn có một chức năng kiểm tra điều kiện trong javascript . thật dễ dàng để sử dụng toán tử ternary . mà sẽ chỉ cần một dòng duy nhất để thực hiện. Ví dụ:

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

một hàm như thế này với một điều kiện có thể được viết như sau.

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

tình trạng ? nếu đúng: nếu sai


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

bạn cũng có thể nối thêm html với toán tử ternary
Chandrashekhar Komati

đó thực sự không phải là cách bạn nên viết bài tập tạm thời và cũng sử dụng === không == thông thái khác mà bạn có thể làm sunday ?.it nên làsun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
TheRealMrCrowley

toàn bộ quan điểm của ternary có điều kiện là rút ngắn các giá trị gán có điều kiện nếu không bạn chỉ nên sử dụng câu lệnh if
TheRealMrCrowley

Bây giờ nói với tôi điều này có đúng hay không. nếu bạn nói sai thì nó vẫn hoạt động và tôi đang sử dụng dự án của mình ..
Chandrashekhar Komati

Tôi biết nó "hoạt động" như thế nào bạn có nó trong ví dụ đầu tiên, nhưng những gì tôi đã cung cấp mà bạn đặt là phiên bản thứ hai cũng vậy. Lưu ý có bao nhiêu sự trùng lặp không cần thiết trong phiên bản hàng đầu so với phiên bản tôi đã đưa cho bạn. JS là mã được gửi đến trình duyệt, vì vậy độ dài mã quan trọng
TheRealMrCrowley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.