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

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

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

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

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


当前回答

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

其他回答

const result: Boolean = strValue === "true" ? true : false

记住匹配大小写:

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

此外,如果是表单元素复选框,还可以检测是否选中了该复选框:

var isTrueSet = document.myForm.IS_TRUE.checked;

假设如果选中,则“设置”为true。其计算结果为真/假。

我有点晚了,但我有一个小片段要做,它本质上维护了所有JScripts truthey/falsey/dirty ness,但包含“false”作为false的可接受值。

与上述方法相比,我更喜欢这种方法,因为它不依赖第三方来解析代码(即:eval/JSON.parse),这在我看来是过度的,它足够短,不需要实用函数,并维护其他truthey/falsy约定。

var value = "false";
var result = (value == "false") != Boolean(value);

// value = "true"  => result = true
// value = "false" => result = false
// value = true    => result = true
// value = false   => result = false
// value = null    => result = false
// value = []      => result = true
// etc..

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

对于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开发中更有用。其他的答案都表明了这一点!

我在用这个

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"