JavaScript se alternativa [duplicado]
-
18-09-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
- Ponto de interrogação e de cólon em JavaScript 7 respostas
O que isso pouco de código representa? Eu sei que é algum tipo de alternativa if
sintaxe ...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
Update:
O que é a necessidade para este tipo de codificação? Isso é mais eficiente ou apenas uma versão abreviada com a mesma eficiência?
Solução
É a condicional operador, é equivalente a algo assim:
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
Mas eu acho que uma declaração de atribuição está faltando no código que você postou, como este:
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
A variável score
será atribuído se pattern.Gotoccurance.score
não é nulo:
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
Um padrão comum para fazer este tipo de atribuições 'valor padrão' em JavaScript é usar o operador OR lógico (||
):
var score = pattern.Gotoccurance.score || '0';
O valor da pattern.Gotoccurance.score
será atribuído à variável score
somente se esse valor não é Falsas (valores Falsas são false
, null
, undefined
, 0
, string ou NaN
comprimento zero).
Caso contrário, se é '0'
Falsas será atribuído.
Update: O desempenho será equivalente, você deve se concentrar na leitura, eu tento usar o operador ternário em expressões que são muito simples, e você também pode melhorar a formatação, dividindo-o em duas linhas para torná-lo mais legível:
var status = (age >= 18) ? "adult"
: "minor";
questão relacionada:
Outras dicas
Esta é uma ternário operador, uma maneira shorthanded que fazer se declarações.
Se re-escrito, ele ficaria assim:
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
É o chamado operador ternário.
Respondendo à atualização pergunta "Por necessidade para este tipo de codificação?"
Você pode, por vezes, usar o operador ternário para reduzir a complexidade:
Por exemplo, eu tenho uma página web que precisava verificar se , pelo menos dois dos três campos de texto específicas tinham valores inseridos. O if / else lógica parecia muito feio, mas o operador ternário tornou um one-liner para determinar quantos campos foram preenchidos:
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
Esta solução parece muito elegante e fácil de ler do que algumas alternativas.
É ternário operador de operador / condicional.
Em matemática, a operação ternário é uma operação enária com n = 3. a operação ternário em um conjunto a toma qualquer dadas três elementos de a e combina-os de modo a formar um único elemento de a.
é uma forma abreviada de if..else
por exemplo. quer saber se um número é par ou não
// Usando if..else abordagem
function CheckEvenOdd()
{
var number = 2;
if(number %2 == 0) alert("even");else alert("odd");
}
// usando ternário
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0)?"even":"odd");
}
Mais uma variante é interruptor
// usando interruptor
function CheckEvenOdd()
{
var number = 2;
switch(number %2)
{
case 0:alert("even");break;
default:alert("odd");break;
}
}
Agora, se você tem um simples if..else condição para executar como o descrito, você pode ir em frente com ternário.
Mas se a verificação condicional torna-se complexa, ir tanto com if..else ou switch como a legibilidade será perdido no ternário
por exemplo. é fácil de executar mínimo ou máximo de dois números usando um operador ternário, mas torna-se desajeitado para encontrar o maior e segundo maior entre os 3 ou mais números e nem sequer é aconselhavel. É melhor usar if..else vez