true - Declarar un booleano en JavaScript usando solo var
var true javascript (8)
Como dice este tutorial muy útil :
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
Si declaro una variable booleana de JavaScript como esta:
var IsLoggedIn;
Y luego lo inicializa con true
o 1
, ¿es seguro? ¿O la inicialización con 1
hace que la variable sea un número?
La variable se convertirá en lo que escribas siempre que la asignes. Inicialmente no está undefined
. Si lo asigna ''true''
se convertirá en una cadena, si lo asigna true
se convertirá en un booleano, si lo asigna 1
se convertirá en un número. Las asignaciones posteriores pueden cambiar el tipo de la variable más tarde.
Las variables en Javascript no tienen un tipo. No-cero, no nulo, no vacío y true
son "verdaderos". Cero, nulo, indefinido, cadena vacía y false
son "falsos".
Sin embargo, hay un tipo booleano, como lo son los literales true
y false
.
Los tipos dependen de su inicialización:
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
Pero eche un vistazo a este ejemplo:
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
El tipo de sus variables depende del valor asignado en JavaScript.
No, no es seguro. Luego puedes hacer var IsLoggedIn = "Foo";
y JavaScript no arrojará un error.
Es posible hacer
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
También puede pasar la variable no booleana al new Boolean()
y hará IsLoggedIn boolean.
var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true
Puede usar y probar variables no inicializadas al menos para su "definición". Me gusta esto:
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
Además, hay muchas posibilidades: si no está interesado en los tipos exactos, use el operador ''=='' (o! [Variable] / !! [variable]) para comparar (eso es lo que Douglas Crockford llama ''verdad'' o '' falsy ''Creo). En ese caso, asignar verdadera o 1 o ''1'' a la variable unitaria siempre devuelve verdadero cuando se le pregunta. De lo contrario [si necesita una comparación segura] use ''==='' para comparar.
var thisMayBeTrue;
thisMayBeTrue = 1;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
thisMayBeTrue = ''1'';
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, in this case, using == or !! ''1'' is implicitly
// converted to 1 and 1 is implicitly converted to true)
thisMayBeTrue = true;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> true
thisMayBeTrue = ''true'';
alert(thisMayBeTrue == true); //=> false
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, here''s no implicit conversion of the string ''true''
// it''s also a demonstration of the fact that the
// ! or !! operator tests the ''definedness'' of a variable.
PD: aunque no se puede probar la "definición" de variables inexistentes. Asi que:
alert(!!HelloWorld);
da un error de referencia (''HelloWorld no está definido'')
(¿Hay una palabra mejor para ''definición''? Perdonen mi holandés de todos modos; ~)
Qué tal algo como esto:
var MyNamespace = {
convertToBoolean: function (value) {
//VALIDATE INPUT
if (typeof value === ''undefined'' || value === null) return false;
//DETERMINE BOOLEAN VALUE FROM STRING
if (typeof value === ''string'') {
switch (value.toLowerCase()) {
case ''true'':
case ''yes'':
case ''1'':
return true;
case ''false'':
case ''no'':
case ''0'':
return false;
}
}
//RETURN DEFAULT HANDLER
return Boolean(value);
}
};
Entonces puedes usarlo así:
MyNamespace.convertToBoolean(''true'') //true
MyNamespace.convertToBoolean(''no'') //false
MyNamespace.convertToBoolean(''1'') //true
MyNamespace.convertToBoolean(0) //false
No lo he probado para el rendimiento, pero la conversión de tipo a tipo no debería ocurrir con demasiada frecuencia; de lo contrario, ¡abriría su aplicación a la inestabilidad a lo grande!
Si desea que IsLoggedIn
se trate como un booleano, debe inicializarlo de la siguiente manera:
var IsLoggedIn=true;
Si lo inicializa con var IsLoggedIn=1;
entonces será tratado como un número entero.
Sin embargo, en cualquier momento, la variable IsLoggedIn
podría referirse a un tipo de datos diferente:
IsLoggedIn="Hello World";
Esto no causará un error.