MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

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

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

Спецификация Статус Комментарий
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Условный Оператор' в этой спецификации.
Стандарт  
ECMAScript 5.1 (ECMA-262)
Определение 'Условный оператор' в этой спецификации.
Стандарт  
ECMAScript 1st Edition (ECMA-262)
Определение 'Условный оператор' в этой спецификации.
Стандарт Изначальное определение. Реализация в JavaScript 1.0.

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

Особенность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Особенность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)

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

Метки документа и участники

 Внесли вклад в эту страницу: DonRai, onatalie, SlavaJan, dmitrydanilich, KTatyana
 Обновлялась последний раз: DonRai,