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

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

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

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

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


当前回答

如果您确定测试主题始终是字符串,那么明确检查它是否为true是最佳选择。

您可能需要考虑添加额外的代码,以防主题实际上是布尔值。

var isTrueSet =
    myValue === true ||
    myValue != null &&
    myValue.toString().toLowerCase() === 'true';

如果代码得到改进/重构以使用实际的布尔值而不是字符串,这将在将来为您节省一些工作。

其他回答

可以按如下方式使用JSON.parse:

var trueOrFalse=“真”;result=JSON.parse(trueOrFalse.toLowerCase());if(结果==真)警报(“这是真的”);其他的警报(“这是错误的”);

在这种情况下,toLowerCase很重要

注意,也许将来代码会更改并返回布尔值,而不是当前的一个字符串。

解决方案是:

//Currently
var isTrue = 'true';
//In the future (Other developer change the code)
var isTrue = true;
//The solution to both cases
(isTrue).toString() == 'true'

布尔对象没有“parse”方法。布尔值('false')返回true,因此这不起作用。!!'false'也返回true,因此这也不起作用。

如果您希望字符串“true”返回布尔值true,而字符串“false”返回布尔型false,那么最简单的解决方案是使用eval()。eval('true')返回true,eval('false')返回false。

不过,在使用eval()时,请记住性能和安全性的影响。

可以使用正则表达式:

/*
 * 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);

(当然在旧版浏览器中不起作用,Firefox显示错误,而Opera、Chrome、Safari和IE显示正确。错误720760)

将字符串(“true”、“false”)和布尔值转换为布尔值

('' + flag) === "true"

标志可以在哪里

 var flag = true
 var flag = "true"
 var flag = false
 var flag = "false"