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

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

其他回答

以下内容就足够了

String.prototype.boolean = function() {
    return "true" == this; 
};

"true".boolean() // returns true "false".boolean() // returns false

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

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

标志可以在哪里

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

你需要(在你的思维中)将你的选择的价值和价值的表示分开。

在JavaScript逻辑中选择一个需要从字符串标记转换为原生类型的点,并在那里进行比较,最好是对每个需要转换的值只进行一次比较。记住,如果字符串sentinel不是脚本所知道的(即默认为true还是false?)

换句话说,是的,您需要依赖于字符串的值。:-)

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

我认为这是非常普遍的:

if(字符串(a).toLowerCase()==“true”)。。。

它说:

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false