我可以在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';

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

其他回答

Boolean.parse()在某些浏览器实现中确实存在。它肯定不是通用的,所以如果这是你需要的东西,你不应该使用这种方法。但以Chrome为例(我使用的是v21),它工作得很好,正如人们所期望的那样。

对于TypeScript,我们可以使用以下函数:

export function stringToBoolean(s: string, valueDefault: boolean = false): boolean {
    switch(s.toLowerCase())
    {
        case "true":
        case "1":
        case "on":
        case "yes":
        case "y":
            return true;

        case "false":
        case "0":
        case "off":
        case "no":
        case "n":
            return false;
    }

    return valueDefault;
}

这里有很多有趣的答案。真的很惊讶没有人发布此解决方案:

var booleanVal = toCast > '';

这在大多数情况下解析为true,而不是bool false、数字零和空字符串(显然)。您可以在事实之后轻松查找其他假字符串值,例如:

var booleanVal = toCast > '' && toCast != 'false' && toCast != '0';  

已经有这么多答案可用了。但在某些情况下,以下内容可能很有用。

// One can specify all values against which you consider truthy
var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(a) {
    return TRUTHY_VALUES.some(function(t) {
        return t === a;
    });
}

这在具有非布尔值的示例中非常有用。

getBoolean('aa'); // false
getBoolean(false); //false
getBoolean('false'); //false

getBoolean('true'); // true
getBoolean(true); // true
getBoolean(1); // true

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

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

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

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