2011-01-04 6 views

Odpowiedz

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

... ale myślę, że odpowiedź Jona jest lepsza!

+0

Z funkcją o nazwie 'castStrToBool', prawdopodobnie zawsze chcesz, aby zwróciła wartość boolowską. Dlatego "return String.prototype.toLowerCase.apply (str) ==" true ";" byłoby wszystko, co było potrzebne w treści funkcji. –

+0

Trwa tu połączenie telepatyczne, co? :) –

+1

@Andy E - Pomyślałem, że konsumentowi tej funkcji można prawdopodobnie pomóc, informując o nieoczekiwanych danych wejściowych, np. Zwracając 'undefined'. Oczywiście, jeśli jesteś zadowolony z tego, że '29/10/1976' lub' 1.056' zostanie sparsowany jako "prawdziwy", to twoja sugestia jest w porządku, ale zazwyczaj będzie to wskazywać na problem, który prawdopodobnie powinien zostać rozwiązany przed osiągnięciem etap "catStrToBool". –

26

Można to zrobić:

var bool = !!someString; 

Jeśli to zrobić, dowiesz się, że ciąg stały "False" jest w rzeczywistości boolean true. Czemu? Ponieważ są to zasady w JavaScript. Wszystko, co nie jest undefined, , pusty łańcuch ("") lub numeryczne zero jest uważane za true.

Jeśli chcesz narzucić własne reguły na smyczki (wątpliwym pomysłem, ale to oprogramowanie), można napisać funkcję z tabeli odnośników do zwracania wartości:

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

może.

edit — ustalił literówka - dzięki @Patrick

+0

To rzeczywiście da 'false' dla' "False" ', ale czy nie da też' false' dla '" True "'? –

+0

@El Ronnoco cóż, dziś rano może być niska kofeina, ale myślę, że ponieważ ciąg "True" jest * nie * w tabeli odnośników, 'falses (s)' zwróci 'undefined', i'! Undefined' jest "prawda". – Pointy

+0

Typo: Powinno być 'return! Falses [s];' –

23

Można użyć czegoś takiego, aby zapewnić swój własny „jest prawdziwe” test na smyczki, pozostawiając drogę inne typy Porównaj nienaruszone:

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 jest to, co chcesz.