JavaScript, если альтернатива [дублировать]
-
18-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Что представляет собой этот фрагмент кода?Я знаю, что это какой-то 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