2012-01-16 37 views
63

sé que en PHP 5.3 en lugar de utilizar esta sintaxis operador ternario redundante:Javascript abreviada operador ternario

startingNum = startingNum ? startingNum : 1 

... podemos usar una sintaxis abreviada para nuestros operadores ternarios en su caso:

startingNum = startingNum ?: 1 

y sé quién es el operador ternario en javascript:

startingNum = startingNum ? startingNum : 1 

... pero hay una shortha ¿Dakota del Norte?

Gracias chicos!

Respuesta

102
var startingNumber = startingNumber || 1; 

¿Algo así como lo que está buscando, donde es predeterminado si no está definido?

var foo = bar || 1; // 1 
var bar = 2; 
foo = bar || 1;  // 2 

Por cierto, esto funciona para una gran cantidad de escenarios, incluyendo objetos:

var foo = bar || {}; // secure an object is assigned when bar is absent 
+1

Creo que es C# –

+0

De hecho, estado rebotando esta mañana. Solucionado, pero gracias por notarlo. –

+1

¿No quiere decir '||' en lugar de '??'? –

13

|| devolverá el primer valor Truthy que encuentra y por lo tanto puede ser utilizado como un operador de coalescencia, similar a C# 's ??

startingNum = startingNum || 1; 
+0

@Web_Designer - no hay problema. –

+0

Me gusta más tu explicación que las otras – ajax333221

+0

@ ajax333221 - ¡gracias! –

10

Sí, hay:

var startingNum = startingNum || 1; 

En general, expr1 || expr2 funciona de la siguiente manera (como se menciona por the documentation):

devoluciones expr1 si se puede convertir en true; de lo contrario, devuelve expr2. Por lo tanto, cuando se usa con Boolean valores, || devuelve true si cualquiera de los operandos es true; si ambos son false, devuelve false.

+0

¿No es más correcto decir 'si a es verdad' contra' si a se evalúa como verdadero'? – JaredPar

+3

@JaredPar: Para evitar ambigüedades, he reemplazado mi explicación detallada original con la de Mozilla Developer Network. Debería ser menos ambiguo. – Tadeck

1
var startingNum = startingNum || 1; 

En este caso, puede utilizar el operador OR.

0

Las respuestas de arriba son correctas. En JavaScript, la siguiente declaración:

startingNum = startingNum ? otherNum : 1 

se puede expresar como

startingNum = otherNum || 1 

Otro escenario no cubre aquí es si desea que el valor a devolver false cuando no está emparejado. La taquigrafía JavaScript para esto es:

startingNum = startingNum ? otherNum : 0 

Pero se puede expresar como

startingNum = startingNum && otherNum 

Sólo quería cubrir otro escenario en el caso de que otros estaban buscando una respuesta más generalizada.

0
startingNum = startingNum || 1 

Si usted tiene una condición con nula, como

startingNum = startingNum ? startingNum : null 

puede utilizar '& &'

startingNum = startingNum && startingNum 
0

Para hacer una ternaria como:

boolean_condition ? true_result : false_result 

en JavaScript, puede hacer:

(boolean_condition && true_result) || false_result; 

Ejemplo:

(true && 'green') || 'red'; 
=> "green" 
(false && 'green') || 'red'; 
=> "red" 
Cuestiones relacionadas