Как вы используете? : (условный) оператор в JavaScript? - PullRequest
368 голосов
/ 07 июня 2011

Может кто-нибудь объяснить мне простыми словами, что такое оператор ?: (условный, "троичный") и как его использовать?

Ответы [ 17 ]

550 голосов
/ 07 июня 2011

Это сокращение в одну строку для оператора 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, который есть на данный момент.

114 голосов
/ 14 августа 2015

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

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


Вместо:

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

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

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

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

Или даже:

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

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

25 голосов
/ 07 июня 2011

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

* ** 1003 тысяча два * Пример

Оператор?: Может использоваться как ярлык для оператора 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 .

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

Также см .:

20 голосов
/ 07 июня 2011

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

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

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

var insurancePremium = age > 21 ? 100 : 200;

Вместо:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}
8 голосов
/ 07 июня 2011
z = (x == y ? 1 : 2);

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

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

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

6 голосов
/ 21 августа 2016

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

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

Пример:

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

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

Пример:

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

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

5 голосов
/ 24 мая 2017

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

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

questionAnswered ? "Awesome!" : "damn" ;

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

если true (?), вы получите "Круто!"

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

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

5 голосов
/ 07 июня 2011

Называется троичный оператор

tmp = (foo==1 ? true : false);
3 голосов
/ 07 февраля 2019

Большинство ответов верны, но я хочу добавить немного больше. Тернарный оператор является ассоциативным справа, что означает, что он может быть связан следующим образом 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; }
}

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

2 голосов
/ 10 февраля 2018
x = 9
y = 8

унарный

++x
--x

Binary

z = x + y

троичной

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