我可以在JavaScript中将表示布尔值的字符串(例如“true”、“false”)转换为内部类型吗?

我有一个隐藏的HTML表单,它根据用户在列表中的选择进行更新。此表单包含一些表示布尔值的字段,并用内部布尔值动态填充。但是,一旦将该值放入隐藏的输入字段,它就会变成字符串。

一旦字段转换为字符串,我唯一能找到的确定它的布尔值的方法就是依赖于它的字符串表示的文字值。

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

有没有更好的方法来实现这一点?


当前回答

您甚至不需要将字符串转换为布尔值。只需使用以下选项:var yourstring=yourstringValue==1?真:假;

其他回答

使用if语句:

函数parseBool(str){if(str.toLowerCase()=='true'){var val=真;}否则如果(str.toLowerCase()=='false'){var val=假;}其他{//如果不是true或false,则返回undefined//var val=未定义;}返回值;}console.log(parseBool(“”),parseBoo(“”的类型);console.log(parseBool('TrUe'),parseBool'('TrUe')的类型);console.log(parseBool('false'),parseBool'('false')类型);

最简单的方法是

a = 'True';
a = !!a && ['1', 'true', 1, true].indexOf(a.toLowerCase()) > -1;

这里有一个简单的函数,

   function convertStringToBool(str){
        return ((str === "True") || (str === "true")) ? true:false;
    }

这将产生以下结果

convertStringToBool("false") //returns false
convertStringToBool("true") // returns true
convertStringToBool("False") // returns false
convertStringToBool("True") // returns true

可以使用Function从字符串“true”或“false”返回布尔值

const TRUE_OR_FALSE=str=>新函数(“return${str}”)();const[TRUE,FALSE]=[“TRUE”,“FALSE”];常量[T,F]=[TRUE_OR_FALSE(真),TRUE_OR_FALSE(假)];console.log(T,类型T);//`true``“布尔值”`console.log(F,F类型);//`false``“布尔值”`

木眼要小心。在看到以500+的赞成票获得最高答案后的后果后,我觉得有义务发布一些实际有用的东西:

让我们从最短但非常严格的方式开始:

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

以一种恰当、更宽容的方式结束:

var parseBool = function(str, strict) 
{
    // console.log(typeof str);
    // strict: JSON.parse(str)
    
    if (str == null)
    {
        if (strict)
            throw new Error("Parameter 'str' is null or undefined.");

        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]));}