2011-01-04 20 views

Respuesta

8
function castStrToBool(str){ 
    if (str.toLowerCase()=='false'){ 
     return false; 
    } else if (str.toLowerCase()=='true'){ 
     return true; 
    } else { 
     return undefined; 
    } 
} 

... pero creo que la respuesta de Jon es mejor!

+0

Con una función llamada 'castStrToBool', probablemente siempre desee que devuelva un valor booleano. Por lo tanto, 'return String.prototype.toLowerCase.apply (str) == 'true';' sería todo lo que se necesitaba en el cuerpo de la función. –

+0

Algo de conexión telepática sucede aquí, ¿eh? :) –

+1

@Andy E - Pensé que el consumidor de esta función probablemente podría ser ayudado al ser informado de la entrada inesperada, por ejemplo, al devolver 'undefined'. Obviamente, si está contento de que '29/10/1976' o' 1.056' se analice como 'verdadero', entonces su sugerencia es correcta, pero esto generalmente indicará un problema que probablemente deba abordarse antes de llegar la etapa 'catStrToBool'. –

26

Usted puede hacer esto:

var bool = !!someString; 

Si lo hace, descubrirá que la constante "False" cadena es, de hecho, boolean true. ¿Por qué? Porque esas son las reglas en Javascript. Cualquier cosa que no sea undefined, null, la cadena vacía (""), o el cero numérico se considera true.

Si desea imponer sus propias reglas para cuerdas (una idea dudosa, pero es su software), se podría escribir una función con una tabla de consulta para devolver valores:

function isStringTrue(s) { 
    var falses = { "false": true, "False": true }; 
    return !falses[s]; 
} 

tal vez.

edición — fija el error tipográfico - gracias @Patrick

+0

Esto de hecho dará 'false' para' "False" 'pero ¿no dará también' false' para '" True "'? –

+0

@El Ronnoco bien, puede que tenga poca cafeína esta mañana, pero creo que porque la cadena "Verdadero" es * no * en la tabla de búsqueda, 'falsos (s)' devolverá 'indefinido', y'! Indefinido' es 'verdadero'. – Pointy

+0

Typo: debería ser 'return! Falsos [s];' –

23

Puede usar algo como esto para proporcionar su propia medida "es verdad" prueba para cuerdas, dejando a su vez otros tipos comparan afectado:

function isTrue(input) { 
    if (typeof input == 'string') { 
     return input.toLowerCase() == 'true'; 
    } 

    return !!input; 
} 
3
function castBool(str) { 
    if (str.toLowerCase() === 'true') { 
     return true; 
    } else if (str.toLowerCase() === 'false') { 
     return false; 
    } 
    return ERROR; 
} 

ERROR es lo que quieras que sea.