¿Cómo puedo convertir una cadena a booleana en JavaScript?
¿Puedo convertir una cadena que representa un valor booleano (por ejemplo, 'verdadero', 'falso') en un tipo intrínseco en JavaScript?
Tengo un formulario oculto en HTML que se actualiza según la selección de un usuario dentro de una lista. Este formulario contiene algunos campos que representan valores booleanos y se completan dinámicamente con un valor booleano intrínseco. Sin embargo, una vez que este valor se coloca en el campo de entrada oculto, se convierte en una cadena.
La única manera que pude encontrar para determinar el valor booleano del campo, una vez convertido en una cadena, fue depender del valor literal de su representación de cadena.
var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';
¿Existe una mejor manera de lograr esto?
Hacer:
var isTrueSet = (myValue === 'true');
usando el operador de identidad ( ===
), que no realiza ninguna conversión de tipo implícita cuando las variables comparadas tienen tipos diferentes.
Esto se establecerá isTrueSet
en un valor booleano true
si la cadena es "verdadera" y booleano false
si es una cadena "falsa" o no está configurada en absoluto.
Para que no distinga entre mayúsculas y minúsculas, intente:
var isTrueSet = /^true$/i.test(myValue);
// or
var isTrueSet = (myValue?.toLowerCase?.() === 'true');
// or
var isTrueSet = (String(myValue).toLowerCase() === 'true');
No:
Probablemente debería tener cuidado al utilizar estos dos métodos para sus necesidades específicas:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
Cualquier cadena que no sea la cadena vacía se evaluará true
usándolas. Aunque son los métodos más limpios que se me ocurren con respecto a la conversión booleana, creo que no son lo que estás buscando.
Advertencia
Esta respuesta heredada altamente votada es técnicamente correcta, pero solo cubre un escenario muy específico, cuando el valor de su cadena es EXACTAMENTE "true"
o "false"
.
Una cadena json no válida pasada a estas funciones a continuación generará una excepción .
Respuesta original:
¿Qué tal si?
JSON.parse("True".toLowerCase());
o con jQuery
$.parseJSON("TRUE".toLowerCase());
const stringToBoolean = (stringValue) => {
switch(stringValue?.toLowerCase()?.trim()){
case "true":
case "yes":
case "1":
return true;
case "false":
case "no":
case "0":
case null:
case undefined:
return false;
default:
return JSON.parse(stringValue);
}
}
Creo que esto es mucho más universal:
if (String(a).toLowerCase() == "true")
...
Va:
String(true) == "true" //returns true
String(false) == "true" //returns false
String("true") == "true" //returns true
String("false") == "true" //returns false
Recuerde hacer coincidir mayúsculas y minúsculas:
var isTrueSet = (myValue.toLowerCase() === 'true');
Además, si se trata de una casilla de verificación de un elemento de formulario, también puedes detectar si la casilla de verificación está marcada:
var isTrueSet = document.myForm.IS_TRUE.checked;
Suponiendo que si está marcado, se "establece" en verdadero. Esto se evalúa como verdadero/falso.