协慌网

登录 贡献 社区

如何在 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 。虽然它们是我能想到的关于布尔转换的最干净的方法,但我认为它们不是你想要的。

警告

这个高度支持的遗留答案在技术上是正确的,但只涵盖一个非常具体的场景,当你的字符串值完全"true""false" (也必须是小写)。

传递给下面这些函数的无效 json 字符串将引发异常


原始答案:

怎么样?

JSON.parse("true");

或者使用 jQuery

$.parseJSON("true");
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);
    }
}