[javascript] JavaScript에서 문자열을 부울로 변환하려면 어떻게해야합니까?

부울 값 (예 : ‘true’, ‘false’)을 나타내는 문자열을 JavaScript에서 내장 유형으로 변환 할 수 있습니까?

목록에서 사용자의 선택에 따라 업데이트되는 HTML의 숨겨진 양식이 있습니다. 이 형식에는 부울 값을 나타내는 일부 필드가 포함되며 고유 부울 값으로 동적으로 채워집니다. 그러나이 값이 숨겨진 입력 필드에 배치되면 문자열이됩니다.

필드의 부울 값을 결정하는 유일한 방법은 일단 문자열로 변환되면 문자열 표현의 리터럴 값에 의존하는 것입니다.

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

이것을 달성하는 더 좋은 방법이 있습니까?



답변

하다:

var isTrueSet = (myValue == 'true');

항등 연산자 ( ===) 대신 비교 변수의 유형이 다른 경우 암시 적 유형 변환을 수행하지 않는 항등 연산자 ( ) 를 사용하여 더 엄격하게 만들 수 있습니다 ==.

var isTrueSet = (myValue === 'true');

하지 마십시오 :

당신은 아마한다 이러한 두 가지 방법 사용에 대한주의 사용자의 특정 요구를 들어 :

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

빈 문자열이 아닌 문자열은이 true를 사용하여 평가됩니다 . 부울 변환과 관련하여 내가 생각할 수있는 가장 깨끗한 방법이지만, 당신이 찾고있는 것이 아니라고 생각합니다.


답변

경고

이 고도로 공명 된 레거시 답변은 기술적으로 정확하지만 문자열 값이 EXACTLY "true"또는 인 경우 매우 구체적인 시나리오에만 적용됩니다 "false".

유효하지 않은 json 문자열이 아래 함수에 전달 되면 예외가 발생 합니다.


원래 답변 :

어때요?

JSON.parse("True".toLowerCase());

또는 jQuery와 함께

$.parseJSON("TRUE".toLowerCase());


답변

stringToBoolean: function(string){
    switch(string.toLowerCase().trim()){
        case "true": case "yes": case "1": return true;
        case "false": case "no": case "0": case null: return false;
        default: return Boolean(string);
    }
}


답변

나는 이것이 매우 보편적이라고 생각합니다.

if (String(a) == "true")

간다 :

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false


답변

대소 문자를 일치시켜야합니다.

var isTrueSet = (myValue.toLowerCase() === 'true');

또한 양식 요소 확인란 인 경우 확인란이 선택되어 있는지 확인할 수도 있습니다.

var isTrueSet = document.myForm.IS_TRUE.checked;

체크되어 있다고 가정하면, “set”은 true와 같습니다. 이것은 참 / 거짓으로 평가됩니다.


답변

정규식을 사용할 수 있습니다.

/*
 * Converts a string to a bool.
 *
 * This conversion will:
 *
 *  - match 'true', 'on', or '1' as true.
 *  - ignore all white-space padding
 *  - ignore capitalization (case).
 *
 * '  tRue  ','ON', and '1   ' will all evaluate as true.
 *
 */
function strToBool(s)
{
    // will match one and only one of the string 'true','1', or 'on' rerardless
    // of capitalization and regardless off surrounding white-space.
    //
    regex=/^\s*(true|1|on)\s*$/i

    return regex.test(s);
}

String 클래스를 확장하고 싶다면 다음을 수행하십시오.

String.prototype.bool = function() {
    return strToBool(this);
};

alert("true".bool());

이것을 얻기 위해 String 객체를 확장하고 싶지만 열거 가능성에 대해 걱정하고 String 객체를 확장하는 다른 코드와 충돌하는 것을 걱정하는 사람들 (주석 참조)의 경우 :

Object.defineProperty(String.prototype, "com_example_bool", {
    get : function() {
        return (/^(true|1)$/i).test(this);
    }
});
alert("true".com_example_bool);

(오래된 브라우저에서는 작동하지 않으며 Opera, Chrome, Safari 및 IE는 true 인 반면 Firefox는 false를 표시합니다. 버그 720760 )


답변

우드 아이는 조심해야합니다. 500 개 이상의 공감 율로 최고 답변을 적용한 후 결과를 본 후 실제로 유용한 내용을 게시 할 의무가 있습니다.

가장 짧지 만 매우 엄격한 방법으로 시작하겠습니다.

var str = "true";
var mybool = JSON.parse(str);

그리고 더 적절하고 관용적 인 방법으로 끝내십시오.

var parseBool = function(str)
{
    // console.log(typeof str);
    // strict: JSON.parse(str)

    if(str == null)
        return false;

    if (typeof str === 'boolean')
    {
        return (str === true);
    }

    if(typeof str === 'string')
    {
        if(str == "")
            return false;

        str = str.replace(/^\s+|\s+$/g, '');
        if(str.toLowerCase() == 'true' || str.toLowerCase() == 'yes')
            return true;

        str = str.replace(/,/g, '.');
        str = str.replace(/^\s*\-\s*/g, '-');
    }

    // var isNum = string.match(/^[0-9]+$/) != null;
    // var isNum = /^\d+$/.test(str);
    if(!isNaN(str))
        return (parseFloat(str) != 0);

    return false;
}

테스트 :

var array_1 = new Array(true, 1, "1",-1, "-1", " - 1", "true", "TrUe", "  true  ", "  TrUe", 1/0, "1.5", "1,5", 1.5, 5, -3, -0.1, 0.1, " - 0.1", Infinity, "Infinity", -Infinity, "-Infinity"," - Infinity", " yEs");

var array_2 = new Array(null, "", false, "false", "   false   ", " f alse", "FaLsE", 0, "00", "1/0", 0.0, "0.0", "0,0", "100a", "1 00", " 0 ", 0.0, "0.0", -0.0, "-0.0", " -1a ", "abc");


for(var i =0; i < array_1.length;++i){ console.log("array_1["+i+"] ("+array_1[i]+"): " + parseBool(array_1[i]));}

for(var i =0; i < array_2.length;++i){ console.log("array_2["+i+"] ("+array_2[i]+"): " + parseBool(array_2[i]));}

for(var i =0; i < array_1.length;++i){ console.log(parseBool(array_1[i]));}
for(var i =0; i < array_2.length;++i){ console.log(parseBool(array_2[i]));}