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

4,351 阅读5分钟

简介

假设我们把布尔值以字符串的形式存储在数据库中,并根据这些值在我们的网站/应用程序中执行一些特定的操作。在这种情况下,我们必须将这些字符串转换为布尔值,然后再在逻辑操作中使用它们。

在这篇文章中,我们将看看在JavaScript中把字符串值转换为布尔值的几种方法(truefalse )。

使用同一性操作符*(===*)。

同义运算符,也被称为严格的平等运算符,只有当且仅当被比较的两个值都是相同类型且具有相同的值时,才会返回true 。换句话说,它确定左边的值是否等于右边的值--如果它们等于,则返回true ,如果它们不等于,则返回false

**注意:**如果你想了解更多关于== *(严格的平等运算符)*和=== (宽松的平等运算符)之间的区别,你应该阅读我们的"JavaScript:==与==运算符"!

本质上,我们将把我们的字符串与字符串"true" 。因此,只有当我们的字符串实际上是"true" ,输出才会是一个布尔值true 。任何其他字符串将导致代码返回false 布尔值。

let myString = "true"; 
let boolOutput = (myString === "true"); //returns true

**注意:**我们写一个带引号的字符串值--"true" ,而布尔值则不带引号--true 。我们将在整篇文章中使用这个符号。

此外,我们可以先将一个字符串转换为小写,只是为了确保字母大小写不会导致任何错误的输出。

let myString = "True"; 
let boolOutput = (myString.toLowerCase() === "true"); // returns true

正如我们之前所说,如果我们的字符串值不等于"true" ,前面的代码将返回false

let myString1 = "Test";
let boolOutput1 = (myString1 === "true"); //returns false

let myString1 = "Test";
let boolOutput1 = (myString1.toLowerCase() === "true"); //returns false

let myString = "True";
let boolOutput2 = (myString2 === "true"); //returns false

我们还可以通过在平等运算符旁边引入三元运算符来增加一些趣味性。我们所要做的就是检查我们的字符串是否等于"true" ,然后如果有匹配,就返回一个布尔值true ,如果没有,就返回false

let myString = "true";
let boolOutput = myString.toLowerCase() == 'true' ? true : false; // returns true

使用正则表达式(RegEx)

正则表达式(RegEx)是用于匹配和测试字符串字符组合的模式。

**注意:在这篇文章中,我们假定你至少对正则表达式有一个基本的了解。但是如果你需要帮助来掌握JavaScript中的正则表达式,你应该考虑阅读我们的"JavaScript中正则表达式和匹配字符串指南"

为了本文的目的,我们将使用JavaScript中正则表达式的最基本形式--我们将创建匹配"true" 的简单regex,并使用test() 方法与我们的字符串进行匹配。

let stringValue = "true"; 
let boolValue = (/true/).test(stringValue); //returns true

你会注意到这实际上是区分大小写的,因为这将返回false ,如果它有轻微的大小写不一致。

let stringValue = "True"; 
let boolValue = (/true/).test(stringValue); //returns false

为了解决这个问题,我们可以在正则表达式的末尾添加/i ,以确保不分大小写的匹配

let stringValue = "True"; 
let boolValue = (/true/i).test(stringValue); //returns true

使用布尔封装类?

JavaScript有一个内置的Boolean 对象来存储布尔值。它实际上是一个布尔值的对象封装器--它封装了其他对象,从而使它们成为有效的布尔值。这是通过测试一个对象的真假值来实现的。一般来说--空对象被评估为false ,非空对象被评估为true

任何不是空字符串的字符串将通过使用Boolean 包装器评估为true

let myString1 = Boolean('true'); //returns true
let myString2 = Boolean(''); // //returns false
let myString3 = Boolean('false'); //returns true
let myString4 = Boolean('True'); //returns true

这里有两个主要问题

  • 首先,对于一个至少有一个空白字符(空格、制表符等)的空字符串,这将返回true ,这就是为什么我们在使用这个方法时必须谨慎。
const myString5 = Boolean(' '); //returns true
  • 其次,将"false" 的字符串转换为false 的布尔值会失败,因为任何非空字符串都会转换为true

双倍NOT运算符 -!

使用双倍NOT运算符等于两次使用逻辑NOT运算符(!),这意味着它颠倒了单一NOT运算符的结果。

let myString1 = !'test'; // returns false
let myString2 = !''; // returns true

当我们使用双倍NOT运算符时,数值被翻转,意味着我们现在是在进行纯布尔转换。

let myString1 = !!'test'; // returns true
let myString2 = !!''; // returns false

双倍NOT (!!)运算符相当简洁,但与Boolean 包装器做同样的事情。然而,如果你不熟悉逻辑NOT (!)运算符,它就有点难读。

我们在使用这个方法时也要谨慎,因为一个至少有一个空白字符的空字符串仍然会返回true ,当我们试图将"false" 的字符串转换为false 的布尔值时,这仍然不会成功(就像Boolean 对象一样)。

结论

在这篇文章中,我们已经看了四种在JavaScript中把字符串转换成布尔值的方法。最简单的方法是使用严格的平等运算符来比较我们的字符串值和"true" - 如果字符串(严格)等于"true" ,输出将是布尔值true 。另外,你也可以在松散平等运算符旁边使用三元运算符来实现同样的目的。另外,正则表达式匹配也是一种可靠的方法。

最后两种方法,Boolean 对象和双非运算符,语法更简单,但它们的缺点是处理false 值的方式--字符串 "false "将返回布尔值true ,这使得它们只适用于一小部分转换情况。