我可以在JavaScript中将表示布尔值的字符串(例如“true”、“false”)转换为内部类型吗?
我有一个隐藏的HTML表单,它根据用户在列表中的选择进行更新。此表单包含一些表示布尔值的字段,并用内部布尔值动态填充。但是,一旦将该值放入隐藏的输入字段,它就会变成字符串。
一旦字段转换为字符串,我唯一能找到的确定它的布尔值的方法就是依赖于它的字符串表示的文字值。
var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';
有没有更好的方法来实现这一点?
如果String对象上有一个函数为我们做这件事,那就太好了,但是我们可以很容易地添加自己的原型来扩展String对象。
在使用之前,将此代码添加到项目中的某个位置。
String.prototype.toBoolean = function() {
return String(this.valueOf()).toLowerCase() === true.toString();
};
试着这样做:
var myValue = "false"
console.log("Bool is " + myValue.toBoolean())
console.log("Bool is " + "False".toBoolean())
console.log("Bool is " + "FALSE".toBoolean())
console.log("Bool is " + "TRUE".toBoolean())
console.log("Bool is " + "true".toBoolean())
console.log("Bool is " + "True".toBoolean())
因此,最初问题的结果是:
var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue.toBoolean();
function parseBool(value: any, defaultsOnUndefined?: boolean) {
if (['true', true, 1, '1', 'yes'].includes(value)) {
return true;
}
if (['false', false, 0, '0', 'no', null].includes(value)) {
return false;
}
return defaultsOnUndefined;
}
OR
function parseBool(value: any) {
if (['true', true, 1, '1', 'yes'].includes(value)) {
return true;
}
return false;
}
var trueVals = ["y", "t", "yes", "true", "gimme"];
var isTrueSet = (trueVals.indexOf(myValue) > -1) ? true : false;
甚至只是
var trueVals = ["y", "t", "yes", "true", "gimme"];
var isTrueSet = (trueVals.indexOf(myValue) > -1);
类似于一些switch语句,但更紧凑。只有当字符串是trueVals字符串之一时,返回的值才会为true。其他一切都是假的。当然,您可能希望对输入字符串进行规范化,使其变为小写,并修剪任何空格。