Как вы используете? : (условный) оператор в JavaScript?

Я использовал Wrapper, чтобы обойти эту проблему. Создайте объект-обертку и передайте свой издеваемый метод.

См. Издевательские статические методы для модульного тестирования Paul Irwin, у него есть хорошие примеры.

369
задан T.J. Crowder 15 September 2016 в 18:27
поделиться

17 ответов

Это сокращение в одну строку для оператора if-else. Он называется условным оператором. 1

Вот пример кода, который можно сократить с помощью условного оператора:

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

Это можно сократить с помощью ?: примерно так:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

В Javascript условный оператор может вычислять выражение, а не просто выражение:

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

Они могут даже быть связаны:

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

Будьте осторожны, иначе у вас получится замысловатый код, подобный этому:

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

1 Часто называют «троичным оператором, «но на самом деле это просто троичный оператор [оператор, принимающий три операнда]. Это единственный JavaScript, который есть на данный момент.

552
ответ дан T.J. Crowder 15 September 2016 в 18:27
поделиться

Большинство ответов верны, но я хочу добавить немного больше. Тернарный оператор является правоассоциативным, что означает, что он может быть связан следующим образом if … else if … else if … else:

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

Эквивалентно:

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

Подробнее здесь здесь

1
ответ дан Arif 15 September 2016 в 18:27
поделиться
 (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
ответ дан Chandrashekhar Komati 15 September 2016 в 18:27
поделиться

Это, вероятно, не самый элегантный способ сделать это. Но для тех, кто не знаком с троичными операторами, это может оказаться полезным. Мое личное предпочтение - сделать 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
ответ дан Joakim Sandqvist 15 September 2016 в 18:27
поделиться

Тернарные выражения очень полезны в JS, особенно в React. Вот упрощенный ответ на многие хорошие, подробные из них.

condition ? expressionIfTrue : expressionIfFalse

Думайте о expressionIfTrue как об операторе OG if, переводящем true;
думайте о expressionIfFalse как об операторе else.

Пример:

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

это проверяло значение x, первое y = (значение) возвращалось, если истинно, второе возвращение после двоеточия: возвращалось y = (значение), если ложно.

0
ответ дан Pang 15 September 2016 в 18:27
поделиться

Условный (троичный) оператор является единственным оператором 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

.
0
ответ дан Srikrushna Pal 15 September 2016 в 18:27
поделиться
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";
2
ответ дан Gajendra D Ambi 15 September 2016 в 18:27
поделиться

Это называется ternary operator. Для получения дополнительной информации вот еще один вопрос, на который я ответил по этому поводу:

Как написать оператор IF else без 'else'

1
ответ дан Community 15 September 2016 в 18:27
поделиться

Он называется троичным оператором

tmp = (foo==1 ? true : false);
.
5
ответ дан eagle12 15 September 2016 в 18:27
поделиться

Эй, приятель, просто помни js работы, оценивая либо true, либо false, верно?

давайте возьмем троичный оператор:

questionAnswered ? "Awesome!" : "damn" ;

Во-первых, js проверяет, является ли questionAnspted true или false.

Если true (?) вы получите «Круто!»

иначе (:) вы получите «черт»;

Надеюсь, это поможет другу :)

5
ответ дан Guy Keren 15 September 2016 в 18:27
поделиться

Мы можем использовать с 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];        
        }

Мы можем использовать приведенный ниже код с Jquery с минимальным кодом

    

    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
ответ дан Ajay2707 15 September 2016 в 18:27
поделиться
z = (x == y ? 1 : 2);

эквивалентно

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

, за исключением, конечно, короче.

8
ответ дан Ernest Friedman-Hill 15 September 2016 в 18:27
поделиться

Тернарный оператор

Обычно у нас есть условные выражения в Javascript.

Пример:

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

, но он содержит две или более строк и не может назначаться переменной. У Javascript есть решение этой проблемы Тернарный оператор . Тернарный оператор может писать в одну строку и назначать переменную.

Пример:

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

Этот троичный оператор подобен в языке программирования C.

6
ответ дан Simplans 15 September 2016 в 18:27
поделиться

Это if statement все в одной строке.

Итак

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

Выражение, которое будет оценено, находится в ( )

. Если оно соответствует true, выполните код после ?

. Если это соответствует ложному, выполнить код после :

2
ответ дан Jason Gennaro 15 September 2016 в 18:27
поделиться

Он называется «троичным» или «условным» оператором.

Пример

Оператор?: Можно использовать как ярлык для оператора if ... else. Обычно он используется как часть более крупного выражения, где оператор if ... else будет неудобным. Например:

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

В примере создается строка, содержащая «Добрый вечер». если это после 6 вечера. Эквивалентный код с использованием оператора if ... else будет выглядеть следующим образом:

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

Из документации MSDN JS .

По сути это условное заявление.

Также см .:

25
ответ дан Community 15 September 2016 в 18:27
поделиться

Я хочу добавить некоторые к данным ответам.

В случае, если вы столкнулись (или хотите использовать) троицу в ситуации, подобной «отобразить переменную, если она установлена, иначе ...», вы можете сделать ее еще короче, без троицы .


Вместо:

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

Вы можете использовать:

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

Это Javascripts, эквивалентный сокращенному тройному оператору PHP ?:

Или даже:

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

Он оценивает переменную, и если она ложная или не установлена, она переходит к следующей.

116
ответ дан Jeffrey Roosendaal 15 September 2016 в 18:27
поделиться

Гуглить немного сложнее, когда у тебя есть только символы;) Используемые термины - «условный оператор javascript».

Если вы видите более забавные символы в Javascript, вам следует сначала поискать операторы Javascript: список операторов MDC . Единственное исключение, с которым вы можете столкнуться, это символ $ .

Чтобы ответить на ваш вопрос, условные операторы заменяют простые операторы if. Пример лучше всего:

var insurancePremium = age > 21 ? 100 : 200;

Вместо:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}
20
ответ дан Community 15 September 2016 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: