2012-03-25 27 views
35

me pregunto si hay un camino más corto para escribir esto:taquigrafía sentencia if/else Javascript

var x = 1; 
if(y != undefined) x = y; 

al principio me trataron x = y || 1, pero que no funcionó. ¿Cuál es la forma correcta de hacerlo?

+0

'x = y || x' funciona si no se preocupan por el estricto ** ** indefinido – Nemesarial

Respuesta

73
var x = y !== undefined ? y : 1; 

Tenga en cuenta que var x = y || 1; asignaría 1 para cualquier caso en el que y es Falsy (por ejemplo false, 0, ""), que puede ser por eso que "no funcionó" para usted. Además, si y es una variable global, si realmente no está definida, es posible que se produzca un error a menos que acceda a ella como window.y.


Como vol7ron sugiere en los comentarios, también se puede utilizar typeof para evitar la necesidad de referirse a VARs globales como window.<name>:

var x = typeof y != "undefined" ? y : 1; 
+0

Yay para los operadores ternarios. Lo intentaré. Editar: Ah, está bien. ¿Qué hay de "indefinido"? No pareció captar eso. –

+0

¿Qué quieres decir? La cadena ''undefined'' es un valor verdadero, y no es igual al valor real' undefined '. – Amber

+0

Quiero decir, donde la variable no ha sido declarada en absoluto. Sé que la cadena 'indefinido' se evalúa con un valor booleano verdadero, pero eso no es lo que estaba buscando. –

3
y = (y != undefined) ? y : x; 

El paréntesis no son necesarios, sólo añado porque creo que es más fácil leer de esta manera.

+3

Sus parens no están balanceadas (y también son innecesarias). – Amber

+0

@Amber En el momento en que empiezas a utilizar la abreviatura de javscript, ya estás diciendo que no te importa la legibilidad, entonces ¿para qué molestarse con parens equilibrados ?. –

13

otra manera de escribir en breve

bePlanVar = !!((bePlanVar == false)); 

// is equivalent to 

bePlanVar = (bePlanVar == false) ? true : false; 

// and 

if (bePlanVar == false) { 
    bePlanVar = true; 
} else { 
    bePlanVar = false; 
} 
1

otra manera que ternario, usando un cortocircuito:

typeof y !== 'undefined' && y || 1

Aunque sigo pensando ternaria más legible ...

0

Aquí hay una manera de hacerlo que funciona, pero puede que no sea la mejor práctica para cualquier lenguaje:

var x,y; 
x='something'; 
y=1; 
undefined === y || (x = y); 

alternativamente

undefined !== y && (x = y); 
+0

Acabo de notar que esto ya fue proporcionado por @AndreFigueiredo – Nemesarial