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?
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?
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;
Yay para los operadores ternarios. Lo intentaré. Editar: Ah, está bien. ¿Qué hay de "indefinido"? No pareció captar eso. –
¿Qué quieres decir? La cadena ''undefined'' es un valor verdadero, y no es igual al valor real' undefined '. – Amber
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. –
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.
Sus parens no están balanceadas (y también son innecesarias). – Amber
@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 ?. –
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;
}
otra manera que ternario, usando un cortocircuito:
typeof y !== 'undefined' && y || 1
Aunque sigo pensando ternaria más legible ...
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);
Acabo de notar que esto ya fue proporcionado por @AndreFigueiredo – Nemesarial
'x = y || x' funciona si no se preocupan por el estricto ** ** indefinido – Nemesarial