javascript - 如何将字符串转换为布尔值JavaScript?

  显示原文与译文双语对照的内容

可以将代表布尔值( e.g,'真','的字符串转换为JavaScript中的固有类型?

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

我能找到的唯一方法确定字段值的布尔,一旦它被转换成一个字符串,是依靠文字值的字符串表示。


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

是否有更好的方法来完成这里任务?

时间:

你可能应该谨慎使用这两个方法为你的特定需求 :


var myBool = Boolean("false");//== true

var myBool =!!"false";//== true

任何不是空字符串的字符串都将使用它们计算为 true 。 尽管它们是我可以想到的关于布尔转换的最干净的方法,但我认为它们不是你想要的。

关于你建议的方式,你可以使用identity运算符( === ) 更加严格,这将在比较变量有不同类型而不是相等运算符( == ) 时进行任何隐式类型转换,而不是:


var isTrueSet = (myValue === 'true');


stringToBoolean: function(string){
 switch(string.toLowerCase()){
 case"true": case"yes": case"1": return true;
 case"false": case"no": case"0": case null: return false;
 default: return Boolean(string);
 }
}


String.prototype.bool = function() {
 return (/^true$/i).test(this);
};
alert("true".bool());

对于那些想扩展的( 查看评论) 字符串对象但担心enumerability和担心冲突与其他代码,扩展了字符串对象:


Object.defineProperty(String.prototype,"com_example_bool", {
 get : function() {
 return (/^(true|1)$/i).test(this);
 }
});
alert("true".com_example_bool);

( 在旧的浏览器中无法工作,Firefox 在 Opera,Chrome,Safari和 IE 显示错误时显示错误。 Bug 720760 )

记住匹配大小写:


var isTrueSet = (myValue.toLowerCase() === 'true');

另外,如果是表单元素复选框,也可以检测复选框是否选中:


var isTrueSet = document.myForm.IS_TRUE.checked;

如果选中此项,则"集合集"等于真。 这里计算结果为真/假。

我认为这很普遍:

if (String(a) =="true")

它是:


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

使用一个映射字符串的json映射


function parseBool2( str ){

 var boolmap = { 
 'no' : false, 
 'NO' : false, 
 'FALSE' : false, 
 'false' : false,
 'yes' : true, 
 'YES' : true, 
 'TRUE' : true, 
 'true' : true 
 };

 return ( str in boolmap && boolmap.hasOwnProperty(str))? 
 boolmap[ str ] :!!str ;
};

如果映射中的值,它将返回来自 boolmap的值,其他智能将使用运算符 转换为布尔值!

parseBool2("no" );: 输出 false


Boolean.parse = function (str) {
 switch (str.toLowerCase ()) {
 case"true":
 return true;
 case"false":
 return false;
 default:
 throw new Error ("Boolean.parse: Cannot convert string to boolean.");
 }
};

我使用以下命令:


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

这里函数执行常规的布尔强制,但字符串"错误"( 区分大小写) 和" 0"。

...