--- title: Условный (тернарный) оператор slug: Web/JavaScript/Reference/Operators/Conditional_Operator tags: - JavaScript - Оператор translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator original_slug: Web/JavaScript/Reference/Operators/Условный_оператор ---
{{jsSidebar("Operators")}}

Условный (тернарный) оператор - единственный оператор в JavaScript, принимающий три операнда: условие, за которым следует знак вопроса (?), затем выражение, которое выполняется, если условие истинно, сопровождается двоеточием (:), и, наконец, выражение, которое выполняется, если условие ложно. Он часто используется в качестве укороченного варианта условного оператора if.

Синтаксис

условие ? выражение1 : выражение2 

Параметры

условие
Выражение, принимающее значение true или false.
выражение1, выражение2
Выражения, значения которых могут принадлежать любому типу.

Описание

Оператор возвращает значение выражения1, если условие верно, и значение выражения2 в противном случае. Например, чтобы вывести сообщение, текст которого зависит от значения переменной isMember, можно использовать такое выражение:

"The fee is " + (isMember ? "$2.00" : "$10.00")

Также можно присваивать значения переменным на основе результатов работы тернарного оператора :

var elvisLives = Math.PI > 4 ? "Да" : "Нет";

Возможны множественные тернарные операции (обратите внимание: условный оператор ассоциативен справа):

var firstCheck = false,
    secondCheck = false,
    access = firstCheck ? "Доступ запрещён" : secondCheck ? "Доступ запрещён" : "Доступ разрешён";

console.log( access ); // выводит в консоль "Доступ разрешён"

Тернарные операции можно использовать и сами по себе - для выполнения различных операций:

var stop = false, age = 16;

age > 18 ? location.assign("continue.html") : stop = true;

Также возможно выполнять несколько операций на каждое сравнение, разделив их запятыми:

var stop = false, age = 23;

age > 18 ? (
    alert("Хорошо, вы можете продолжить."),
    location.assign("continue.html")
) : (
    stop = true,
    alert("Простите, вы ещё так юны!")
);

При присвоении значения также возможно выполнение более одной операции. В этом случае переменной будет присвоено то значение, которое стоит последним в списке значений, разделённых запятой.

var age = 16;

var url = age > 18 ? (
    alert("Хорошо, вы можете продолжить."),
    // alert вернёт "undefined", но это будет проигнорировано, потому что
    // не является последним в списке значений, разделённых запятой
    "continue.html" // значение будет присвоено, если age > 18
) : (
    alert("Вы слишком молоды!"),
    alert("Простите :-("),
    // ит.д. ит.д.
    "stop.html" // значение будет присвоено, если !(age > 18)
);

location.assign(url); // "stop.html"

Спецификации

Спецификация Статус Комментарий
{{SpecName('ES6', '#sec-conditional-operator', 'Условный Оператор')}} {{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.12', 'Условный оператор')}} {{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.12', 'Условный оператор')}} {{Spec2('ES1')}} Изначальное определение. Реализация в JavaScript 1.0.

Поддержка браузерами

{{Compat}}

Смотрите также