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

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

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

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

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


当前回答

在HTML中,属性的值最终变成字符串。为了在不希望出现的情况下减轻这种情况,您可以使用一个函数将它们有条件地解析为它们在JavaScript或任何其他感兴趣的编程语言中表示的值。

以下是从字符串类型恢复布尔类型的说明,但它也可以进一步扩展到其他数据类型,如数字、数组或对象。

除此之外,JSON.parse还有一个作为函数的复活参数。它也可以用来实现同样的目的。

让我们调用一个看起来像布尔值的字符串“true”,一个布尔值字符串,同样我们也可以调用一个像数字“1”的字符串,一个数字字符串。然后我们可以确定字符串是否为布尔字符串:

const isBooleanString = (string) => ['true', 'false'].some(item => item === string);

之后,我们需要通过JSON.parse方法将布尔字符串解析为JSON:

JSON.parse(aBooleanString);

但是,任何不是布尔字符串、数字字符串或任何字符串化对象或数组(任何无效的JSON)的字符串都会导致JSON.parse方法抛出SyntaxError。

因此,您需要知道如何调用它,即它是否为布尔字符串。您可以通过编写一个函数来实现这一点,该函数进行上述定义的布尔字符串检查并调用JSON.parse:

function parse(string){
  return isBooleanString(string) ? JSON.parse(string)
    : string;
}

通过进一步参数化isBooleanString实用程序以接受接受的布尔字符串的可选数组,可以进一步概括isBooleanString实用程序,从而对什么是布尔字符串具有更广泛的视角:

const isBooleanString = (string, spec = ['true', 'false', 'True', 'False']) => spec.some(item => item === string);

其他回答

@guinaps>任何不是空字符串的字符串都将通过使用它们计算为true。

如何使用String.match()方法

var str="true";
var boolStr=Boolean(str.match(/^true$/i)); 

这本身不会得到1/0或yes/no,但它会捕捉到TRUE/TRUE,同时,它也会为任何碰巧有“TRUE”作为子字符串的字符串返回false。

EDIT

下面是一个处理真/假、1/0、是/否(不区分大小写)的函数

​function stringToBool(str) {
    var bool;
    if (str.match(/^(true|1|yes)$/i) !== null) {
        bool = true;
    } else if (str.match(/^(false|0|no)*$/i) !== null) {
        bool = false;
    } else {
        bool = null;
        if (console) console.log('"' + str + '" is not a boolean value');
    }
    return bool;
}

stringToBool('1'); // true
stringToBool('No'); // false
stringToBool('falsey'); // null ("falsey" is not a boolean value.)
stringToBool(''); // false
function isTrue(val) {
    try {
        return !!JSON.parse(val);
    } catch {
        return false;
    }
}

你的解决方案很好。

在这种情况下,使用==是愚蠢的,因为字段的值始终是字符串。

使用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')类型);

if (String(a) == "true"){
  //true block
} else {
  //false block
}