Bagaimana Anda menggunakan ini? : operator (kondisional) dalam JavaScript?

434

Dapatkah seseorang tolong jelaskan kepada saya dengan kata-kata sederhana apa itu ?:operator (kondisional, "ternary") dan bagaimana cara menggunakannya?

muudless
sumber
2
Mereka adalah operator. Operan adalah nilai yang Anda gunakan dengan operator ini.
BoltClock
7
Fakta menyenangkan: beberapa bahasa (yaitu Groovy ) sebenarnya memiliki operan ?:(seperti yang telah Anda tulis, tanpa ada pernyataan di antara) - operator Elvis . Cukup pintar.
Rob Hruska
kemungkinan duplikat javascript jika alternatif
Rob Hruska
3
Simbol Google dapat menjadi masalah, tetapi bagaimana dengan Googling "operator Javascript" (dan mempelajari semuanya)?
nnnnnn
periksa entri wiki ini en.wikipedia.org/wiki/Elvis_operator
Nerdroid

Jawaban:

645

Ini adalah singkatan satu baris untuk pernyataan if-else. Ini disebut operator kondisional. 1

Berikut adalah contoh kode yang dapat disingkat dengan operator bersyarat:

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

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

Ini dapat disingkat dengan ?:seperti ini:

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

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

Seperti semua ekspresi, operator kondisional juga dapat digunakan sebagai pernyataan mandiri dengan efek samping, meskipun ini tidak biasa di luar minifikasi:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

Mereka bahkan dapat dirantai:

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

Namun, berhati-hatilah, karena Anda akan berakhir dengan kode berbelit-belit seperti ini:

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

1 Sering disebut "operator terner," namun pada kenyataannya itu hanya sebuah operator ternary [operator menerima tiga operan]. Hanya itu yang dimiliki JavaScript saat ini.

Peter Olson
sumber
56
Hanya untuk memperjelas namanya: ternaryadalah jenis operator (yaitu ia memiliki 3 bagian). Nama operator ternary khusus itu adalah conditional operator. Hanya ada satu operator ternary di JS sehingga ketentuannya disalahgunakan.
Hilang Coding
1
@tryingToGetProgrammingStraight bentuk terner secara teknis adalah ekspresi, dan ekspresi dapat berisi ekspresi lain untuk membentuk pohon ekspresi. kode di sana adalah seperti apa bentuk pohon ekspresi :) lihat: fsharpforfunandprofit.com/posts/expressions-vs-statements
Alexander Troup
1
Sangat merekomendasikan memperbarui contoh untuk kasus penggunaan umum, bukan kasus penggunaan efek samping yang sering disebut sebagai penyalahgunaan operator.
TJ Crowder
7
Tidak yakin mengapa ada sedikit tata bahasa di bagian bawah, tetapi itu tidak benar. Jika javascript hanya memiliki 1 dari jenis operator, maka sudah pasti benar untuk mengatakan THE operator ternary dan bukan operator ternary ... Mengatakan "operator ternary ini adalah operator ternary dalam javascript (dan hanya itu satu-satunya)" adalah konyol, cukup gunakan THE dan itu menyiratkan semua itu.
Andrew
1
@MarkCarpenterJr Dalam JavaScript cara khas untuk melakukannya adalah dengan ||operator, karena hubungan arus pendek jika nilai di sebelah kiri benar.
Peter Olson
142

Saya ingin menambahkan beberapa ke jawaban yang diberikan.

Jika Anda menemukan (atau ingin menggunakan) suatu terner dalam situasi seperti 'tampilkan variabel jika disetel, jika tidak ...', Anda dapat membuatnya lebih pendek, tanpa terner .


Dari pada:

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

Kamu bisa menggunakan:

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

Ini adalah Javascripts sama dengan operator ternary PHP steno ?:

Atau bahkan:

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

Ini mengevaluasi variabel, dan jika itu salah atau tidak disetel, ia melanjutkan ke yang berikutnya.

Jeffrey Roosendaal
sumber
4
Saya berjuang dengan ternary dan akhirnya menemukan jawaban ini. Terima kasih!
Ljubisa Livac
Jika saya tidak menggunakan kawat gigi di sekitar operator ternary 'Hello ' + (username ? username : 'guest'), Hello + jika diabaikan dan hanya hasil operasi ternary yang dikembalikan. Adakah yang bisa menjelaskan mengapa?
Shiva
2
@ Shiva Tanpa tanda kurung, ia mengevaluasi seluruh bagian kiri :, 'Hello ' + usernameyang selalu true, karena itu adalah string dengan panjang lebih besar dari 0.
Jeffrey Roosendaal
26

Ini disebut operator 'ternary' atau 'conditional'.

Contoh

Operator?: Dapat digunakan sebagai pintasan untuk pernyataan if ... else. Ini biasanya digunakan sebagai bagian dari ekspresi yang lebih besar di mana pernyataan if ... else akan canggung. Sebagai contoh:

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

Contoh membuat string yang berisi "Selamat malam." jika setelah jam 6 sore. Kode yang setara menggunakan pernyataan if ... else akan terlihat sebagai berikut:

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

Dari dokumentasi MSDN JS .

Pada dasarnya ini adalah pernyataan kondisional steno.

Lihat juga:

Michael Robinson
sumber
5
Ini sebenarnya disebut operator kondisional.
ChaosPandion
5
Ini adalah operator kondisional ternary
Petah
4
@Michael - Silakan lihat bagian 11.12 Operator Bersyarat (? :)
ChaosPandion
7
Apakah orang masih memperdebatkan hal ini? Ya ampun.
BoltClock
7
@BoltClock - Tidak sepenuhnya berdebat, hanya mencoba untuk menormalkan kosakata penting kita.
ChaosPandion
21

Agak sulit untuk Google ketika semua yang Anda miliki adalah simbol;) Persyaratan yang digunakan adalah "operator kondisional javascript".

Jika Anda melihat simbol lucu lagi di Javascript, Anda harus mencoba mencari operator Javascript terlebih dahulu: daftar operator MDC . Satu-satunya pengecualian yang mungkin Anda temui adalah $simbol .

Untuk menjawab pertanyaan Anda, operator bersyarat mengganti pernyataan sederhana jika. Contoh terbaik:

var insurancePremium = age > 21 ? 100 : 200;

Dari pada:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}
David Tang
sumber
Penjelasan yang baik, tetapi contohnya buruk karena memberikan nilai boolean tergantung pada hasil ekspresi boolean, yang tidak masuk akal. Anda lebih suka menggunakan var olderThan20 = age > 20;sebagai gantinya.
BalusC
@ BalusC - ya :) Saya menyadari itu, tetapi contoh sulit untuk ditarik keluar dari topiku! Akan memikirkan yang lebih baik ...
David Tang
9
z = (x == y ? 1 : 2);

setara dengan

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

kecuali, tentu saja, lebih pendek.

Ernest Friedman-Hill
sumber
7

Sebagian besar jawabannya benar tetapi saya ingin menambahkan sedikit lebih banyak. The operator ternary benar-asosiatif, yang berarti dapat dirantai dengan cara berikut if … else-if … else-if … else:

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

Setara dengan:

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

Lebih detail ada di sini

Arif
sumber
1
Ini yang saya cari.
Sazal Das
6

Ini disebut operator ternary

tmp = (foo==1 ? true : false);
elang12
sumber
6
Ini disebut operator kondisional. Hal ini terjadi untuk menjadi satu-satunya contoh sebuah operator ternary dalam bahasa.
Lightness Races in Orbit
tmp = foo == 1 melakukan hal yang sama sehingga akan cukup
Robert Varga
6

Operator ternary

Biasanya kami memiliki pernyataan bersyarat dalam Javascript.

Contoh:

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

tetapi itu berisi dua atau lebih baris dan tidak dapat menetapkan ke variabel. Javascript punya solusi untuk Operator Ternary Bermasalah ini . Operator Ternary dapat menulis dalam satu baris dan menetapkan ke variabel.

Contoh:

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

Operator Ternary ini Mirip dalam bahasa pemrograman C.

Simplans
sumber
5

Hei, sobat, ingat, js bekerja dengan mengevaluasi benar atau salah, kan?

mari kita ambil operator ternary:

questionAnswered ? "Awesome!" : "damn" ;

Pertama, js memeriksa apakah pertanyaan yang Dijawab adalah trueatau false.

jika true( ?) Anda akan mendapatkan "Luar Biasa!"

lain ( :) Anda akan mendapatkan "sial";

Semoga ini bisa membantu teman :)

Guy Keren
sumber
2

Ini if statementsemua dalam satu baris.

Begitu

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

Ekspresi yang akan dievaluasi adalah di ( )

Jika cocok dengan benar, jalankan kode setelah ?

Jika cocok dengan false, jalankan kode setelah :

Jason Gennaro
sumber
var x = 1; y = (x == 1)? benar salah;
augurone
2
x = 9
y = 8

unary

++x
--x

Biner

z = x + y

Ternary

2>3 ? true : false;
2<3 ? true : false;
2<3 ? "2 is lesser than 3" : "2 is greater than 3";
Gajendra D Ambi
sumber
1

Ini disebut ternary operator. Untuk info lebih lanjut, inilah pertanyaan lain yang saya jawab mengenai ini:

Cara menulis pernyataan IF else tanpa 'else'

Travis Webb
sumber
4
Sebenarnya ternary adalah jenis operator (yaitu ia memiliki 3 bagian). Nama operator ternary khusus itu adalah conditional operator. Hanya ada satu operator ternary di JS sehingga ketentuannya disalahgunakan.
Hilang Coding
1

Ini mungkin bukan cara yang paling elegan untuk melakukan ini. Tetapi bagi seseorang yang tidak terbiasa dengan operator ternary, ini bisa terbukti bermanfaat. Preferensi pribadi saya adalah melakukan fallback 1-liner alih-alih blok kondisi.

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

Operator ternary

Joakim Sandqvist
sumber
1

Kita bisa menggunakan dengan Jquery dan panjangnya seperti contoh di bawah ini:

Misalkan kita memiliki kotak teks GuarantorName yang memiliki nilai dan ingin mendapatkan nama depan dan nama belakang - itu mungkin nol. Jadi rathar daripada

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

Kita dapat menggunakan kode di bawah ini dengan Jquery dengan kode minimum

    

    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>

Ajay2707
sumber
1

Ekspresi ternary sangat berguna di JS, terutama Bereaksi. Inilah jawaban yang disederhanakan untuk banyak yang baik, detail yang disediakan.

condition ? expressionIfTrue : expressionIfFalse

Anggap expressionIfTruesebagai OG jika pernyataan itu benar;
anggap expressionIfFalsesebagai pernyataan lain.

Contoh:

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

ini memeriksa nilai x, y pertama = (nilai) dikembalikan jika benar, pengembalian kedua setelah titik dua: kembali y = (nilai) jika salah.

PBrook
sumber
0

Operator kondisional (ternary) adalah satu-satunya operator JavaScript yang mengambil tiga operan. Operator ini sering digunakan sebagai jalan pintas untuk pernyataan if.

condition ? expr1 : expr2 

Jika kondisinya benar, operator mengembalikan nilai expr1; jika tidak, ia mengembalikan nilai 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));

Untuk klarifikasi lebih lanjut silakan baca tautan dokumen MDN

Srikrushna
sumber
0

Jika Anda memiliki satu kondisi, periksa fungsi instance dalam javascript . mudah untuk menggunakan operator ternary . yang hanya perlu satu baris untuk diimplementasikan. Ex:

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

fungsi seperti ini dengan satu syarat dapat ditulis sebagai berikut.

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

kondisi ? jika Benar: jika Salah

Bandara Sunali
sumber
-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>"
Chandrashekhar Komati
sumber
Anda dapat menambahkan html juga dengan operator ternary
Chandrashekhar Komati
Thats benar-benar tidak bagaimana Anda harus menulis tugas ternary dan juga menggunakan === tidak == bijaksana lain Anda mungkin hanya melakukannya sunday ?. Seharusnyasun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
TheRealMrCrowley
inti dari terary kondisional adalah untuk mempersingkat nilai penugasan bersyarat jika tidak, Anda hanya perlu menggunakan pernyataan if
TheRealMrCrowley
sekarang katakan padaku ini benar atau tidak. jika Anda mengatakan salah maka tetap ini berfungsi dan saya menggunakan proyek saya ..
Chandrashekhar Komati
Saya tahu itu "berfungsi" bagaimana Anda memilikinya dalam contoh pertama, tetapi begitu juga apa yang saya berikan Anda menempatkan sebagai versi kedua. Perhatikan berapa banyak duplikasi yang tidak perlu ada di versi atas vs yang saya berikan kepada Anda. JS adalah kode yang dikirim ke browser, jadi panjang kode penting
TheRealMrCrowley