Вопрос

На этот вопрос уже есть ответ здесь:

Что представляет собой этот фрагмент кода?Я знаю, что это какой-то if альтернативный синтаксис...

pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'

Обновить:

В чем необходимость такого рода кодирования?Является ли это более эффективным или просто сокращенная версия с той же эффективностью?

Это было полезно?

Решение

Это тот самый условный оператор, это эквивалентно чему-то подобному этому:

if (pattern.Gotoccurance.score != null) {
  pattern.Gotoccurance.score;
} else {
  '0';
}

Но я думаю, что оператор присваивания отсутствует в коде, который вы опубликовали, вот так:

var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';

В score переменная будет назначена, если pattern.Gotoccurance.score не является нулевым:

var score;
if (pattern.Gotoccurance.score != null) {
  score = pattern.Gotoccurance.score;
} else {
  score = '0';
}

Общим шаблоном для выполнения такого рода назначений значений по умолчанию в JavaScript является использование логического оператора OR (||) :

var score = pattern.Gotoccurance.score ||  '0';

Ценность pattern.Gotoccurance.score будет присвоен score переменная только в том случае, если это значение не фальшивый (ложными значениями являются false, null, undefined, 0, строка нулевой длины или NaN).

В противном случае, если это ложь '0' будет назначен.

Обновить: Производительность будет эквивалентной, вы должны сосредоточиться на удобочитаемости, я стараюсь использовать тернарный оператор в выражениях, которые очень просты, и вы также можете улучшить форматирование, разделив его на две строки, чтобы сделать более читаемым:

var status = (age >= 18) ? "adult"
                         : "minor";

Связанный с этим вопрос:

Другие советы

Это такой троичный оператор, сокращенный способ выполнения инструкций if.

Если бы его переписали заново, это выглядело бы примерно так:

if (pattern.Gotoccurance.score != null) {
   return pattern.Gotoccurance.score;
} else {
   return '0';
}

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

Отвечая на обновление вопроса "Зачем нужен такой тип кодирования?"

Иногда вы можете использовать тернарный оператор для уменьшения сложности:

Например, у меня есть веб-страница, которая должна была подтвердить, что по крайней мере в двух из трех определенных текстовых полей были введены значения.Логика if / else выглядела довольно уродливо, но тернарный оператор сделал ее однострочной, чтобы определить, сколько полей было заполнено:

var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
                     (lastName.length > 0 ? 1 : 0) +
                     (zipCode.length > 0 ? 1 : 0) );

if (numberFilledInFields < 2)
{
    validation = false;
    return;
}

Это решение выглядит довольно элегантным и легким для чтения, чем некоторые альтернативы.

Это троичный оператор / условный оператор .

В математике, a троичная операция является n-арной операцией с n = 3.Троичная операция над множеством A берет любые заданные три элемента A и объединяет их, образуя единый элемент A.

это короткая ручная форма if ..else

например ,хотите узнать, является ли число четным или нет

//Используя подход if..else

function CheckEvenOdd()
{
    var number = 2;
    if(number %2 == 0) alert("even");else alert("odd");
}

//использование троичного

function CheckEvenOdd()
{
    var number = 2;
    alert((number %2 == 0)?"even":"odd");
}

Еще один вариант - переключатель

//использование переключателя

function CheckEvenOdd()
{
    var number = 2;
    switch(number %2)
    {
        case 0:alert("even");break;
        default:alert("odd");break;
    }
}

Теперь, если у вас есть простое условие if..else для выполнения, подобное описанному, вы можете перейти к ternary .

Но если условная проверка становится сложной , используйте либо if..else , либо switch , поскольку читаемость будет потеряна в ternary

например ,легко выполнить минимум или максимум из двух чисел, используя троичный оператор, но становится неудобно находить наибольшее и второе по величине среди 3 или более чисел и даже не рекомендуется.Вместо этого лучше использовать if..else

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top