JavaScript:解析字符串布尔值?

Agi*_*ble 66 javascript trim

JavaScript有parseInt()parseFloat(),但没有parseBoolparseBoolean方法在全球范围内,据我所知.

我需要一个方法,使用"true"或"false"之类的值来获取字符串并返回JavaScript Boolean.

这是我的实现:

function parseBool(value) {
    return (typeof value === "undefined") ? 
           false : 
           // trim using jQuery.trim()'s source 
           value.replace(/^\s+|\s+$/g, "").toLowerCase() === "true";
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的功能吗?请给我你的反馈.

谢谢!

RGB*_*RGB 76

我倾向于用三元组做一个衬里.

var bool_value = value == "true" ? true : false
Run Code Online (Sandbox Code Playgroud)

编辑:更快的是简单地避免使用逻辑语句,而只是使用表达式本身:

var bool_value = value == 'true';
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为value == 'true'根据value变量是否是一个字符串来评估'true'.如果是,则整个表达式变为true,如果不变,则变为false,然后该结果bool_value在评估之后被分配.

  • 为什么不进一步缩短呢?`var bool_value = value =="true"`做同样的事:) (32认同)
  • 这里使用三元表达式来处理你传递null/undefined/empty的情况:`bool_value = value?(value.toLowerCase()=="true"):false` (9认同)
  • 更短的方式:`var bool = !! value` (3认同)
  • @Ifch0o1我不会使用`var bool = !!value`。包含“false”的字符串是一个真值,因此 `!!'false' === true` (3认同)
  • 我使用以下三元组:!value || 值==='假'?false:是的; 它将正确捕获以下内容:false,true,"false","true",0,1,""和undefined (2认同)
  • 我通常希望当有人说他们想要“将字符串解析为布尔值”时,他们的意思是他们想要将字符串“false”映射到布尔值 false。但是在 javascript 中,!!'false' 产生布尔值 true。如果您不相信我,请在您最喜欢的浏览器或 nodeJS repl 中打开 javascript 控制台并自己尝试一下。如果原始海报可以接受这种“解析”将“假”变为真,那么我想!很好,但这肯定不是我期望解析器的行为。 (2认同)

F.A*_*ves 34

您可以使用JSON.parse:

JSON.parse("true"); //returns boolean true
Run Code Online (Sandbox Code Playgroud)

  • 不处理混合大小写`JSON.parse("True")` 或非 JSON 语法,例如 JSON.parse("x") (4认同)
  • @AndrewL你可能会做 JSON.parse("True".toLowerCase()) 用你的变量替换“True” (4认同)

Mar*_*sen 14

这取决于您希望功能如何工作.

如果您只想测试字符串中的'true'一词,并定义任何不具有false的字符串(或非字符串),最简单的方法可能就是:

function parseBoolean(str) {
  return /true/i.test(str);
}
Run Code Online (Sandbox Code Playgroud)

如果你想确保整个字符串是单词true,你可以这样做:

function parseBoolean(str) {
  return /^true$/i.test(str);
}
Run Code Online (Sandbox Code Playgroud)

  • 这种原生的方式绝对是愚蠢的.布尔函数应该执行后面的示例.如果需要查看字符串是否包含单词true或false,则应检查索引是否> 0. (2认同)

Pau*_*ing 10

您可以尝试以下方法:

function parseBool(val)
{
    if ((typeof val === 'string' && (val.toLowerCase() === 'true' || val.toLowerCase() === 'yes')) || val === 1)
        return true;
    else if ((typeof val === 'string' && (val.toLowerCase() === 'false' || val.toLowerCase() === 'no')) || val === 0)
        return false;

    return null;
}
Run Code Online (Sandbox Code Playgroud)

如果它是有效值,则返回等效的bool值,否则返回null.


rsp*_*rsp 4

您可以使用 JSON.parse 或 jQuery.parseJSON 并使用类似以下内容查看它是否返回 true:

function test (input) {
    try {
        return !!$.parseJSON(input.toLowerCase());
    } catch (e) { }
}
Run Code Online (Sandbox Code Playgroud)