2009-11-06 12 views
8

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

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

Actualización:

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

Respuesta

34

Es el operador conditional, es equivalente a algo como esto:

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'; 

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

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

Un patrón 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'; 

se le asignará el valor de pattern.Gotoccurance.score a la variable score sólo si ese valor no es falsy (los valores de faly son false, null, undefined, 0, cadena de longitud cero o NaN).

De lo contrario, si es falso '0' serán asignados.

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, dividirlo en dos líneas para hacer más legible:

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

pregunta relacionada:

+0

Oh, ok gr8, ¿por qué necesita este tipo de codificación, esta es la versión más eficiente o simplemente acortada con la misma eficacia? –

+0

¿El tiempo de interpretación afecta el rendimiento? – barkmadley

+0

Este es el tipo de respuesta que hace la diferencia. No hay más dudas cuando se trata de JavaScript y el operador ternario. Bien hecho CMS. –

2

Se llama operador ternario.

+3

Es * a * operador ternario. Resulta ser el único en el idioma, pero podría haber otros operadores ternarios teóricos. –

5

Esto es ternary operator, una forma abreviada de hacer declaraciones.

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

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

+1 por decir "ternario", siempre me olvido el nombre de este tipo :) – marcgg

+0

"ternario" solo significa "función con aridad de 3." ...? ..: ... es el operador condicional. –

0

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 comprobar que al menos dos de los tres campos de texto específicos habían introducido los 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 rellenaron:

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.

0

Es operador/operador condicional ternario.

En matemáticas, un ternary operation 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.

se 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"); 
} 

// utilizando ternaria

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

Una variante más es cambiar

// usando el interruptor

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

Ahora, si tiene una condición if..else simple para funcionar como la descrita, puede continuar con ternary.

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 realizar un mínimo o un máximo de dos números usando un operador ternario, pero se vuelve torpe para encontrar el mayor número & entre 3 o más números y ni siquiera se recomienda. Es mejor utilizar if..else en su lugar