Nasıl kullanılır? : (koşullu) operatör JavaScript ile?


434

Birisi bana ?:(koşullu, "üçlü") operatör ve nasıl kullanılacağını basit bir şekilde açıklayabilir mi?


2
Bunlar operatörler. İşlenenler, bu işleçleri kullandığınız değerlerdir.
BoltClock

7
Eğlenceli gerçek: bazı diller (yani Groovy ) aslında bir işlenene sahiptir ?:(yazdığınız gibi, arasında herhangi bir ifade olmadan) - Elvis operatörü . Oldukça akıllı.
Rob Hruska


3
Google'la çalışma sembolleri sorunlu olabilir, ancak Google'la "Javascript operatörleri" (ve hepsini öğrenme) Google'a ne dersiniz?
nnnnnn

bu wiki girişine göz
atın

Yanıtlar:


645

Bu, if-else ifadesi için tek satırlık bir stenondur. Buna koşullu operatör denir. 1

Koşullu işleçle kısaltılabilecek bir kod örneği:

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

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

Bu, bu şekilde kısaltılabilir ?::

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

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

Tüm ifadeler gibi, koşullu işleç de yan etkilere sahip bağımsız bir ifade olarak kullanılabilir, ancak bu minyatür dışında olağandışı bir durumdur :

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

Hatta zincirlenebilirler:

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

Yine de dikkatli olun, aksi takdirde şu şekilde kıvrımlı bir kod elde edersiniz:

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

1 Genellikle "üçlü operatör" olarak adlandırılan ama aslında bu sadece bir [bir operatör üç işlenen kabul] üçlü operatörü. Yine de şu anda JavaScript'in sahip olduğu tek şey.


56
Sadece isim netleştirmek için: ternaryolan tip operatörünün (üst üste 3 bölümden oluşur yani). Adı o belirli üçlü operatörü olduğunu conditional operator. JS'de sadece bir üçlü operatör var, bu yüzden terimler yanlış kullanılıyor.
Gone Coding

1
@tryingToGetProgrammingStraight üçlü formu teknik olarak bir ifadedir ve ifadeler, ifade ağaçları oluşturmak için başka ifadeler içerebilir. Bu kod tam olarak bir ifade ağacının neye benzediğini görüyoruz :) bkz: fsharpforfunandprofit.com/posts/expressions-vs-statements
Alexander Troup

1
Operatörün kötüye kullanılması olarak sıklıkla belirtilen bir yan etki kullanım durumu için değil, yaygın kullanım durumu için örneği güncellemenizi kesinlikle öneririz.
TJ Crowder

7
Neden altta biraz dilbilgisi bulanıklığı olduğundan emin değilim, ama yanlış. Javascript sadece 1 tipte bir operatöre sahipse, o zaman üçlü bir operatör değil üçlü bir operatör demek doğrudur ... "Bu üçlü operatör javascriptte üçlü bir operatördür (ve tek olan)" saçma, sadece THE kullanın ve tüm bunları ima eder.
Andrew

1
@MarkCarpenterJr JavaScript'te bunu yapmanın tipik yolu ||operatördür, çünkü soldaki değer doğruysa kısa devre yapar.
Peter Olson

142

Eklemek istiyorumVerilen cevaplara biraz .

'Ayarlanmışsa bir değişkeni görüntüleme' gibi bir durumda bir üçlü ile karşılaşırsanız (veya kullanmak isterseniz), üçlü olmadan , daha da kısaltabilirsiniz .


Onun yerine:

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

Kullanabilirsiniz:

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

Bu PHP'nin stenografi üçlü operatörüne eşit Javascripts ?:

Ya da:

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

Değişkeni değerlendirir ve yanlış veya ayarlanmamışsa bir sonrakine geçer.


4
Üçlü ile mücadele ediyordum ve sonunda bu cevabı buldum. Teşekkür ederim!
Ljubisa Livac

Ben olsaydım içinde üçlü operatör etrafında parantez kullanmamak 'Hello ' + (username ? username : 'guest'), Hello + ihmal ve sadece üçlü operasyon sonucu döndürülür eğer. Biri nedenini açıklayabilir mi?
Shiva

2
@Shiva Parantez olmadan tüm sol kısmı değerlendirir: 'Hello ' + usernamebu her zaman true, çünkü uzunluğu 0'dan büyük bir dize
Jeffrey Roosendaal

26

Buna 'üçlü' veya 'koşullu' operatör denir.

Misal

?: İşleci, if ... else ifadesi için kısayol olarak kullanılabilir. Genellikle if ... else deyiminin garip olacağı daha büyük bir ifadenin parçası olarak kullanılır. Örneğin:

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

Örnek, "İyi akşamlar" içeren bir dize oluşturur. 18:00 sonra ise. Bir if ... else deyimini kullanan eşdeğer kod aşağıdaki gibi görünür:

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

Gönderen MSDN JS belgelerinde .

Temelde bu steno bir koşullu ifade.

Ayrıca bakınız:


5
Buna aslında koşullu operatör denir.
ChaosPandion

5
Üçlü bir koşullu operatör
Petah

4
- @Michael bölüm bakınız (?:) 11.12 Koşullu Operatör şartnamenin: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
ChaosPandion

7
İnsanlar hala bu şeyleri tartışıyorlar mı? Tanrım.
BoltClock

7
@BoltClock - Tam olarak tartışmamakla, sadece temel kelime dağarcığımızı normalleştirmeye çalışmak.
ChaosPandion

21

Tüm sahip olduğunuz semboller google için biraz zor;) Kullanılacak terimler "javascript koşullu operatör" dir.

Javascript'te daha komik semboller görürseniz, önce Javascript'in operatörlerini aramayı denemelisiniz: MDC'nin operatörler listesi . Karşılaşabileceğiniz tek istisna, $semboldür .

Sorunuzu cevaplamak için koşullu işleçler basit if ifadelerinin yerini alır. En iyi örnek:

var insurancePremium = age > 21 ? 100 : 200;

Onun yerine:

var insurancePremium;

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

İyi bir açıklama, ancak örnek kötüdür, çünkü mantıklı olmayan bir boole ifadesinin sonucuna bağlı olarak bir boole değeri atar. Onun yerine kullanmak istersiniz var olderThan20 = age > 20;.
BalusC

@BalusC - evet :) Bunu fark ettim, ama örnekler şapkamdan çekilmek zor! Daha iyi bir düşünecek ...
David Tang


7

Cevapların çoğu doğru ama biraz daha eklemek istiyorum. Üçlü operatör bu edilebilir araçlar sağ birleştirici, bir zincirli şu şekilde if … else-if … else-if … else:

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

Eşittir:

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

Daha fazla detay burada


1
Aradığım şey bu.
Sazal Das


6

Üçlü operatör

Genellikle Javascript'te koşullu ifadeler bulunur.

Misal:

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

ancak iki veya daha fazla satır içerir ve bir değişkene atayamaz. Javascript bu Sorun Üçlü Operatör için bir çözüm var . Üçlü Operatör bir satıra yazabilir ve bir değişkene atayabilir.

Misal:

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

Bu Üçlü operatör C programlama dilinde benzerdir.


5

Hey dostum sadece js çalışmalarını doğru ya da yanlış olarak değerlendirerek hatırlıyor musunuz?

üçlü bir operatör alalım:

questionAnswered ? "Awesome!" : "damn" ;

Birincisi, questionAnswered olup olmadığını denetler js trueveya false.

Eğer true( ?) "Harika!"

else ( :) "lanet olsun";

Umarım bu arkadaş yardımcı olur :)


2

Bu bir if statement bir satırda.

Yani

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

Değerlendirilecek ifade ( )

True ile eşleşiyorsa, kodu ?

False ile eşleşirse, kodu :


var x = 1; y = (x == 1)? doğru yanlış;
augurone

2
x = 9
y = 8

birli

++x
--x

İkili

z = x + y

Üçlü

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

1

Buna ternary operator. Daha fazla bilgi için, bununla ilgili cevapladığım başka bir soru:

'Else' olmadan IF else deyimi nasıl yazılır


4
Aslında üçlü operatör tipidir (yani 3 kısmı vardır). Adı o belirli üçlü operatörü olduğunu conditional operator. JS'de sadece bir üçlü operatör var, bu yüzden terimler yanlış kullanılıyor.
Gone Coding

1

Bu muhtemelen bunu yapmanın en zarif yolu değildir. Ancak üçlü operatörlere aşina olmayan biri için bu yararlı olabilir. Kişisel tercihim koşul blokları yerine 1 astarlı yedekler yapmak.

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

Üçlü operatör


1

Aşağıdaki örnekte olduğu gibi Jquery ile birlikte uzunluk da kullanabiliriz:

Değeri olan ve ad ve soyad almak isteyen GuarantorName metin kutumuz olduğunu varsayalım; boş olabilir. Çok rathar

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

Minimum kod ile Jquery ile aşağıdaki kodu kullanabiliriz

    

    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

Üçlü ifadeler JS'de, özellikle React'te çok faydalıdır. Sağlanan birçok iyi, ayrıntılı soruya basitleştirilmiş bir cevap.

condition ? expressionIfTrue : expressionIfFalse

İfade expressionIfTruedoğrulanırsa OG olarak düşünün ; başka bir ifade olarak
düşünün expressionIfFalse.

Misal:

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

bu x değerini kontrol etti, ilk y = (değer) doğruysa döndürüldü, iki nokta üst üste işaretinden sonraki ikinci dönüş: y = (değer) yanlışsa döndürdü.


0

Koşullu (üçlü) işleç, üç işlenen alan tek JavaScript operatörüdür. Bu işleç sıklıkla if ifadesi için kısayol olarak kullanılır.

condition ? expr1 : expr2 

Koşul true olursa, işleç ifade1 değerini döndürür; aksi takdirde ifade2 değerini döndürür.

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

Daha fazla açıklama için lütfen MDN belge bağlantısını okuyun


0

Javascript'te bir koşul kontrol örneği işleviniz varsa . üçlü operatör kullanımı kolaydır . uygulamak için yalnızca tek bir satıra ihtiyaç duyar . Ör:

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

tek bir koşulu olan böyle bir fonksiyon aşağıdaki gibi yazılabilir.

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

durum ? Doğru ise: Yanlışsa


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

üçlü operatör ile html ekleyebilirsiniz
Chandrashekhar Komati

Bu gerçekten üçlü ödev yazmak ve aynı zamanda sadece yapabileceğiniz gibi === not == diğer akıllıca kullanmak sunday ?gerekir değil. olmalıdırsun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
TheRealMrCrowley

koşullu üçlemenin tüm amacı koşullu atama değerlerini kısaltmaktır, aksi takdirde bir if ifadesi kullanmalısınız
TheRealMrCrowley

şimdi bana bunun doğru olup olmadığını söyle. yanlış diyorsan hala çalışıyor ve projemi kullanıyorum ..
Chandrashekhar Komati

Ben ilk örnekte nasıl var "çalışır" biliyorum, ama ben ikinci sürümü olarak koymak ne sağladım. Size verdiğim vs üst sürümünde ne kadar gereksiz çoğaltma var dikkat edin. JS tarayıcıya gönderilen kod, bu nedenle kod uzunluğu önemlidir
TheRealMrCrowley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.