Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Qué dice este fragmento de código representa? Sé que es una especie de sintaxis alternativa if ...

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

Actualización:

¿Cuál es la necesidad de este tipo de codificación? Esto es más eficiente o simplemente una versión abreviada con la misma eficacia?

¿Fue útil?

Solución

Es la condicional operador, que es equivalente a algo de esta manera:

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

Pero creo que una sentencia de asignación no se encuentra en el código que envió, así:

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

Se asignará La variable score si pattern.Gotoccurance.score no es nulo:

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

Un modelo común de hacer este tipo de tareas 'valor predeterminado' en JavaScript es utilizar el operador lógico OR (||):

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

El valor de pattern.Gotoccurance.score será asignado a la variable score sólo si ese valor no es Falsy (valores Falsy son false, null, undefined, 0, cadena de longitud cero o NaN).

De lo contrario, si se trata de le asignará '0' Falsy.

Actualización: La actuación será equivalente, usted debe centrarse en la legibilidad, trato de utilizar el operador ternario en las expresiones que son muy simples, y también puede mejorar el formato, dividirla en las dos líneas para que sea más legible:

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

pregunta relacionada:

Otros consejos

Este es un operador ternario, una manera de pocos jugadores que ver si las declaraciones.

Si re-escrito, se vería así:

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

Se llama el operador ternario.

En respuesta a la actualización pregunta "¿Por qué la necesidad de este tipo de codificación?"

A veces se puede utilizar el operador ternario para reducir la complejidad:

Por ejemplo, tengo una página web que necesita para verificar que al menos dos de los tres campos de texto específicos habían entrado en valores. La lógica if / else se ve bastante feo, pero el operador ternario lo hizo una sola línea para determinar cuántos campos se llenaron en:

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

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

Esta solución parece muy elegante y fácil de leer que algunas alternativas.

Es ternario operador / operador condicional.

En matemáticas, un operación ternaria es una operación n-aria con n = 3. una operación ternaria en un conjunto a toma cualquiera de los tres elementos dados de a y las combina para formar un único elemento de a.

es una forma abreviada de if..else

por ejemplo. que desee saber si un número es par o no

// Aplicando un enfoque de if..else

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

// usando ternario

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

Una variante más es interruptor

// usando el interruptor

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

Ahora, si usted tiene una condición if..else fácil de realizar como la descrita, puede seguir adelante con ternaria.

Pero si la comprobación condicional se vuelve compleja, ya sea ir con if..else o switch como la legibilidad se perderá en ternaria

por ejemplo. es fácil de realizar mínimo o máximo de dos números utilizando un operador ternario, pero se vuelve torpe para encontrar la más grande y la segunda más grande entre 3 o más números y ni siquiera se recommmended. Es mejor utilizar if..else lugar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top