解释一下JavaScript中的非布尔值与布尔值的强制关系

解释一下JavaScript中的非布尔值与布尔值的强制关系

我们将学习JavaScript中的非布尔值与布尔值的强制关系。对于初学者来说,coercion这个词在JavaScript中是新的。所以,让我们澄清一下什么是coercion。

胁迫 是将一种数据类型的变量转换为另一种数据类型。我们都知道,JavaScript不是一种类型严格的语言。所以,我们不需要定义变量的类型。有时,JavaScript会自动地胁迫变量,并在输出中给出不可预知的结果。

在JavaScript中,有两种类型的强制力。一种是隐式强制,另一种是显式强制。我们将在本教程中逐一学习这两种强制方式。

明确的胁迫

当一个非布尔值被明确地转换为布尔值时,就会发生显式协整,使用布尔协整方法之一,如Boolean()或!

我们将详细讨论这两种方法。

使用Double NOT (!!)操作符进行显式强制操作

当我们在JavaScript中对任何数值使用not (!)操作符时,它将非布尔值转换为布尔值。

一个not(!)操作符给出了数值的错误结果,而两个not(!!)操作符给出了布尔值的实际结果。

语法

用户可以按照下面的语法,使用双非运算符将非布尔值胁迫为布尔值。-

var non_bool = "non-bool";
var bool = !!non_bool;

在上面的语法中,第一个not(!)操作符将字符串类型的non_bool变量胁迫为布尔变量。第二个not(!)操作符用来获取non_bool变量的实际布尔值。

下面是一些使用双非运算符的例子——。

console.log(!!0); // logs false
console.log(!!1); // logs true

在上面的例子中,非布尔值0被明确地用双非运算符强制为布尔值。双非运算符将其操作数转换为布尔值,然后将其倒置,因此表达式!!0相当于!(!false),其值为false。

让我们看看一个带有HTML和JavaScript的完整例子

示例

在这个例子中,我们创建了三个名为num1、num2和num3的数字变量。此外,我们还用不同的正值、负值和零值初始化了这些数字变量。

用户可以观察到输出中数字的实际布尔值。0的布尔值是假的,因为它是JavaScript中虚假的布尔值之一。

<html>
<body>
   <h2> Coercion using <i> Doble NOT (!!) </i> Operator </h2>
   <p id = "output"> </p>
   <script>
      let output = document.getElementById("output");
      let num1 = 10;
      let num2 = 0;
      let num3 = -10;

      output.innerHTML += "num1 = " + num1 + "<br/>";
      output.innerHTML += "num2 = " + num2 + "<br/>";
      output.innerHTML += "num3 = " + num3 + "<br/>";
      output.innerHTML += "The boolean results of the above number values are given below.<br/>";

      // Using Double NOT Operator
      num1 = !!num1;
      num2 = !!num2;
      num3 = !!num3;

      output.innerHTML += "num1 = " + num1 + "<br/>";
      output.innerHTML += "num2 = " + num2 + "<br/>";
      output.innerHTML += "num3 = " + num3 + "<br/>";
   </script>
</body>
</html>

使用Boolean()构造函数的显式协整性

在JavaScript中,显式强制是指javascript开发者将变量从一种数据类型转换为另一种类型。在这里,我们将学习非布尔值到布尔值的显式强制法。

我们可以简单地使用JavaScript中的 “布尔 “构造函数,将任何数值转换为布尔值。

语法

用户可以按照下面的语法,在JavaScript中把非布尔值胁迫成布尔值。

let var1 = 30;
let var2 = Boolean(var1);

在上面的语法中,var1是数字数据类型,我们使用布尔构造函数将其强制为布尔类型。

下面是一些使用Boolean()构造函数的例子—-。

console.log(Boolean(0)); // logs false
console.log(Boolean(1)); // logs true

在上面的例子中,非布尔值0被明确地用布尔函数胁迫为布尔值。布尔函数返回其参数的布尔值,所以表达式Boolean(0)返回false。

当我们将任何非布尔值强制转换成布尔值时,除了六个假值之外,它的结果总是为真。对于这六个假值,我们总是得到假的布尔值作为结果。

下面给出了六个假的布尔值。

  • False
  • “”
  • NaN
  • 0
  • Null
  • Undefined

示例

我们在这个例子中创建了不同的变量,并以不同的假值对它们进行初始化。我们可以观察到,当我们把它们强制变成布尔值时,它总是给出一个假的布尔值作为结果。

<html>
<body>
   <h2> Coercion using the <i> Boolean()</i> Constructor </h2>
   <p id = "output"> </p>
   <script>
      let output = document.getElementById("output");
      // Creating the variables
      let falsy1 = undefined;
      let falsy2 = null;
      let falsy3 = "";

      output.innerHTML += "falsy1 = " + falsy1 + "<br/>";
      output.innerHTML += "falsy2 = " + falsy2 + "<br/>";
      output.innerHTML += "falsy3 = " + falsy3 + "<br/>";
      output.innerHTML +=
      "The boolean results of the above falsy values are given below.<br/>";

      // coercing the different falsy values to the boolean values.
      output.innerHTML += "falsy1 = " + Boolean(falsy1) + "<br/>";
      output.innerHTML += "falsy2 = " + Boolean(falsy2) + "<br/>";
      output.innerHTML += "falsy3 = " + Boolean(falsy3) + "<br/>";
   </script>
</body>
</html>

隐性胁迫

当一个非布尔值被用在一个期望有布尔值的上下文中时,就会发生隐含的强制力。在这种情况下,JavaScript会使用一组被称为 “truthy “和 “falsy “值的规则自动将该值转换为布尔值。

示例

在这个例子中,我们使用JavaScript中图像的隐藏属性,通过点击来显示图像—-。

// Example 1: Implicit coercion in a conditional statement
if (0) {
   console.log("This will not be logged");
}

// Example 2: Implicit coercion using the logical NOT operator
console.log(!0); // logs true
console.log(!1); // logs false

在第一个例子中,值0被用在条件语句中,它被隐含地强制为一个布尔值,使用的规则是Truthy和Falsy值。在JavaScript中,值0被认为是虚假的,所以条件语句将不会被执行。

在第二个例子中,逻辑NOT运算符被用来否定非布尔值0的布尔值。逻辑NOT运算符颠倒了其操作数的布尔值,所以表达式!”0 “等同于!”false”,其结果为 “true”。

在JavaScript中,有两种类型的强制力。一种是隐式强制,另一种是显式强制。我们在本教程中逐一学习了这两种类型的强制。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程