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

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

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

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

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


当前回答

var isTrueSet=eval(myValue);

其他回答

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

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

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

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

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

我对这个问题的看法是,它旨在满足三个目标:

对于truthy和falsy值,返回true/false,但对于多个字符串值,如果它们是布尔值而不是字符串,则返回truthy或falsy。第二,提供一个弹性接口,使指定值以外的值不会失败,而是返回默认值第三,用尽可能少的代码完成所有这些。

使用JSON的问题是它会导致Javascript错误而失败。该解决方案不具有弹性(尽管它满足1和3):

JSON.parse("FALSE") // fails

此解决方案不够简洁:

if(value === "TRUE" || value === "yes" || ...) { return true; }

我正在为Typecast.js解决这个确切的问题。这三个目标的最佳解决方案是:

return /^true$/i.test(v);

它适用于许多情况,在传入像{}这样的值时不会失败,而且非常简洁。它还返回false作为默认值,而不是undefined或抛出Error,这在松散类型的Javascript开发中更有用。其他的答案都表明了这一点!

我使用以下方法:

function parseBool(b) {
    return !(/^(false|0)$/i).test(b) && !!b;
}

此函数执行通常的布尔强制,字符串“false”(不区分大小写)和“0”除外。