--- title: Условный (тернарный) оператор slug: Web/JavaScript/Reference/Operators/Conditional_Operator tags: - JavaScript - Оператор translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator original_slug: Web/JavaScript/Reference/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}}