解释一下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中,有两种类型的强制力。一种是隐式强制,另一种是显式强制。我们在本教程中逐一学习了这两种类型的强制。