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

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

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

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

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


当前回答

具有JSON解析的通用解决方案:

function getBool(val) {
    return !!JSON.parse(String(val).toLowerCase());
}

getBool("1"); //true
getBool("0"); //false
getBool("true"); //true
getBool("false"); //false
getBool("TRUE"); //true
getBool("FALSE"); //false

UPDATE(无JSON):

function getBool(val){ 
    var num = +val;
    return !isNaN(num) ? !!num : !!String(val).toLowerCase().replace(!!0,'');
}

我还创造了fiddle来测试它http://jsfiddle.net/remunda/2GRhG/

其他回答

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

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

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

你的解决方案很好。

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

如果您确定输入仅在“true”和“false”之间为什么不:

设x=“真”;//设x=“false”;设y=x===“真”?真:假;console.log(类型(y),y);

将字符串转换为布尔值

var vIn = "true";
var vOut = vIn.toLowerCase()=="true"?1:0;

将字符串转换为数字

var vIn = 0;
var vOut = parseInt(vIn,10/*base*/);

我在用这个

String.prototype.maybeBool = function(){

    if ( ["yes", "true", "1", "on"].indexOf( this.toLowerCase() ) !== -1 ) return true;
    if ( ["no", "false", "0", "off"].indexOf( this.toLowerCase() ) !== -1 ) return false;

    return this;

}

"on".maybeBool(); //returns true;
"off".maybeBool(); //returns false;
"I like js".maybeBool(); //returns "I like js"