如何在 JavaScript 中将字符串转换为布尔值?

IT技术 javascript boolean-expression boolean-operations string-conversion
2021-01-09 05:14:22

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

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

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

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

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

6个回答

做:

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

使用标识运算符 ( ===),当比较的变量具有不同类型时,它不会进行任何隐式类型转换。


别:

您可能应该谨慎使用这两种方法来满足您的特定需求:

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

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

任何不是空字符串的字符串都将true通过使用它们来计算。虽然它们是我能想到的关于布尔转换的最干净的方法,但我认为它们不是你要找的。

我遵循克罗克福德的建议和使用===!==只要有道理,这几乎总是如此。
2021-03-28 05:14:22
@guinaps 大部分 javascript 严格约定都适用于所有 javascript 用法,只会导致代码复杂,并且缺乏对 javascript 的原理、理论或用法的理解。
2021-03-29 05:14:22
myValue === 'true';正好等价于myValue == 'true';=====这里使用没有任何好处
2021-03-30 05:14:22

警告

这个高度赞成的旧答案在技术上是正确的,但仅涵盖非常特定的情况,当您的字符串值是 EXACTLY"true""false".

下面传递给这些函数的无效 json 字符串将引发异常


原答案:

怎么样?

JSON.parse("True".toLowerCase());

或使用 jQuery

$.parseJSON("TRUE".toLowerCase());
很简单,只是说它JSON.parse("TRUE".toLowerCase())可以正确解析。
2021-03-15 05:14:22
这样做的问题是许多潜在的值会生成一个解析错误,从而停止 JS 执行。所以运行 JSON.parse("FALSE") 会破坏 Javascript。我认为,问题的关键不是简单地解决这些确切的情况,而是要对其他情况有弹性。
2021-03-26 05:14:22
@BishopZ :停止 JS 执行可能是遵循最佳模式编码风格的理想功能: en.wikipedia.org/wiki/Fail-fast
2021-04-02 05:14:22
stringToBoolean: function(string){
    switch(string.toLowerCase().trim()){
        case "true": 
        case "yes": 
        case "1": 
          return true;

        case "false": 
        case "no": 
        case "0": 
        case null: 
          return false;

        default: 
          return Boolean(string);
    }
}
请注意,这将默认为true- 例如:stringToBoolean('banana') // true
2021-03-11 05:14:22
其实可以简化一下。1) 不需要测试"true","yes""1"2)toLowerCase不返回null3)Boolean(string)string!==""此处相同=>switch(string.toLowerCase()) {case "false": case "no": case "0": case "": return false; default: return true;}
2021-04-01 05:14:22

我认为这是非常普遍的:

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

它是:

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false
当您可以接收大写或布尔值的字符串时,则 String(a).toLowerCase() === 'true'
2021-04-05 05:14:22

记得匹配大小写:

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

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

var isTrueSet = document.myForm.IS_TRUE.checked;

假设如果它被选中,它被“设置”等于真。这评估为真/假。

如果 myValue 为空或未定义或字符串以外的任何类型,这将失败。
2021-03-16 05:14:22