Jak korzystać z?: (warunkowy) operator w JavaScript?

Czy ktoś mógłby mi wyjaśnić prostymi słowami czym jest ?: (warunkowy, "trójkowy") operator i jak go używać?

Author: T.J. Crowder, 2011-06-07

15 answers

Jest to jednolinijkowy skrót dla instrukcji if-else. Nazywa się operatorem warunkowym.1

Oto przykład kodu, który można skrócić za pomocą operatora warunkowego:

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

Można to skrócić za pomocą ?: Tak:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

W Javascript operator warunkowy może oceniać wyrażenie, a nie tylko instrukcję:

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

Mogą być nawet przykute:

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

Bądź ostrożny, albo skończysz z zawiłym kodem tak:

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

1często nazywany "operatorem trójdzielnym", ale w rzeczywistości jest to po prostu A operator trójdzielny [operator przyjmujący trzy operandy]. Jest to jednak jedyny, który obecnie ma JavaScript.

 455
Author: Peter Olson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 18:29:30

Chcę Dodać kilka do podanych odpowiedzi.

W przypadku, gdy napotkasz (lub chcesz użyć) trójnik w sytuacji takiej jak 'display a variable if it' s set, else...', można go jeszcze skrócić, bez trójnika.


Zamiast:

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

Możesz użyć:

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

jest to Javascripts odpowiednik krótkiego operatora trójwymiarowego PHP?:

Lub nawet:

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

Ocenia zmienną, a jeśli jest false lub unset, to przechodzi do następnego.

 80
Author: Jeffrey Roosendaal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-30 13:15:27

Nazywa się operatorem 'ternary' lub 'conditional'.

Przykład

The ?: operator może być używany jako skrót od if...else oświadczenie. Jest zwykle używany jako część większe wyrażenie, gdzie if...else oświadczenie byłoby niezręczne. Na przykład:

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

Przykład tworzy ciąg znaków zawierający "Dobry wieczór."jeśli jest po 18: 00. Odpowiedni kod przy użyciu an if...inaczej oświadczenie wyglądałoby jak "follows": {]}

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

Z MSDN js documentation.

Zasadniczo jest to skrócona instrukcja warunkowa.

Zobacz też:

 21
Author: Michael Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:32

To trochę trudne do wygooglowania, gdy wszystko, co masz są symbole ;) Warunki korzystania są "javascript warunkowy operator".

Jeśli widzisz więcej zabawnych symboli w Javascript, spróbuj najpierw wyszukać operatory Javascript: lista operatorów MDC . Jedynym wyjątkiem, z którym możesz się spotkać, jest $ symbol .

Aby odpowiedzieć na twoje pytanie, operatory warunkowe zastępują proste polecenia if. Przykład jest najlepszy:

var insurancePremium = age > 21 ? 100 : 200;

Zamiast of:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}
 17
Author: David Tang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:56
z = (x == y ? 1 : 2);

Jest równoważne

if (x == y)
    z = 1;
else
    z = 2;
Poza tym, że jest krótszy.
 8
Author: Ernest Friedman-Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 02:13:36

Operator Trójdzielny

Często mamy wyrażenia warunkowe w Javascript.

przykład:

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

Ale zawiera dwie lub więcej linii i nie może przypisać zmiennej. Javascript ma rozwiązanie tego problemu Operator trójkowy . Operator trójkowy może zapisywać w jednej linii i przypisywać do zmiennej.

przykład:

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

Ten operator trójdzielny jest podobny w języku programowania C.

 6
Author: Simplans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-21 15:59:52

Nazywa się operatorem trójdzielnym

tmp = (foo==1 ? true : false);
 4
Author: eagle12,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 02:13:58

Hej kolego pamiętaj tylko, że js działa oceniając na true lub false, prawda?

Weźmy operator trójkowy:

questionAnswered ? "Awesome!" : "damn" ;

Po pierwsze, js sprawdza, czy pytanie jest true Czy false.

Jeśli true ( ? ) dostaniesz " niesamowite!"

Else (:) dostaniesz "damn";

Mam nadzieję, że to pomoże przyjacielowi:)

 3
Author: Guy Keren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 11:11:34

To if statement Wszystko w jednej linii.

Więc

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

Wyrażenie do oceny znajduje się w ( )

Jeśli pasuje do true, wykonaj kod po ?

Jeśli pasuje do false, wykonaj kod po :

 2
Author: Jason Gennaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 02:18:01

Nazywa się ternary operator. Aby uzyskać więcej informacji, oto kolejne pytanie, na które odpowiedziałem:

Jak napisać oświadczenie IF else bez "else"

 1
Author: Travis Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:53
x = 9
y = 8

Unary

++x
--x

Binarny

z = x + y

Ternary

2>3 ? true : false;
2<3 ? true : false;
2<3 ? "2 is lesser than 3" : "2 is greater than 3";
 1
Author: Gajendra D Ambi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 16:04:24

Operator warunkowy (ternary) jest jedynym operatorem JavaScript to wymaga trzech operandów. Operator ten jest często używany jako skrót do instrukcji if.

condition ? expr1 : expr2 

Jeśli warunek jest true, operator zwraca wartość expr1; w przeciwnym razie zwraca wartość 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));

Aby uzyskać więcej wyjaśnień, przeczytaj link do dokumentu MDN

 0
Author: Srikrushna Pal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 11:54:06

Możemy użyć operatora trójdzielnego, jak poniżej, gdzie można wykonać mniej kodowania:

var FullName = "Asp.net Core";
var FirstName = FullName.split(" ")[0];  //give the first index array value :"Asp.net"
var LastName = FullName.split(" ")[1];  //give the second index array value :"Core"
var splitLength = FullName.split(" ").length;  //give length of array : 2

Również możemy używać z Jquery jak również długość jak Poniższy przykład:

    //Suppose we have GuarantorName textbox which have value and want to split with space
    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>
 0
Author: Ajay2707,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 10:58:07

To prawdopodobnie nie jest najbardziej elegancki sposób, aby to zrobić. Ale dla kogoś, kto nie jest zaznajomiony z operatorów trójkowych, może to okazać się przydatne. Moje osobiste preferencje to robić 1-liner fallbacks zamiast condition-blocks.

  // 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 Trójdzielny

 0
Author: Joakim Sandqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 10:41:08
 (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>"
 -3
Author: Chandrashekhar Komati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 07:35:54