Skip to content

JavaScript 布尔值

JavaScript 中的布尔值表示两个值之一:true 或 false。布尔值对于控制程序流程(program flow)和进行逻辑比较(logical comparisons)至关重要。

在编程中,你经常需要一种数据类型(data type)来表示二元状态(binary state),例如:

  • 是 / 否
  • 开 / 关
  • 真 / 假 (TRUE / FALSE)

JavaScript 为此目的提供了 Boolean 数据类型。它只能持有 true 或 false 这两个值。

let isJavaScriptFun = true;
let isGameOver = false;

你可以使用 Boolean() 函数将任何值显式地(explicitly)转换为其对应的布尔值(用来判断一个表达式或变量是 truthy(真值) 还是 falsy(假值))。

console.log(Boolean(10 > 9)); // returns true
console.log(Boolean(0)); // returns false
console.log(Boolean("hello")); // returns true

然而,通常不需要使用 Boolean() 进行显式转换,因为 JavaScript 会在布尔上下文(boolean contexts)(例如 if 语句)中执行隐式类型转换(implicit coercion)。

if (10 > 9) { // 10 > 9 evaluates to true
console.log("This will run.");
}

布尔值是比较操作(comparison operations)和条件语句(conditional statements)的基石。

有关完整的概述,请参阅关于 JavaScript 比较和条件语句的章节。以下是一些示例:

运算符描述示例
==等于 (宽松相等,执行类型转换)if (value == 10) { /* … */ }
===严格等于 (不执行类型转换)if (value === 10) { /* … */ }
!=不等于 (宽松不等)if (status != “active”) { /* … */ }
!==严格不等于if (status !== “active”) { /* … */ }
>大于if (score > 9000) { /* … */ }
<小于if (age < 18) { /* … */ }
>=大于或等于if (quantity >= 1) { /* … */ }
<=小于或等于if (price <= 50) { /* … */ }
表达式的布尔结果(无论是 truthy (真值) 还是 falsy (假值))决定了 JavaScript 中条件逻辑的行为。

在 JavaScript 中,如果一个值在布尔上下文中评估为 true,则该值被认为是 “truthy”(真值)。大多数值都是 truthy 的,包括:

  • 布尔值 true 本身。
  • 任何非空字符串(例如,"hello","false")。
  • 任何非零数字(例如,100,-15,3.14)。
  • 任何非零 BigInt(例如 1n)。
  • 所有对象(包括数组和函数)。
// Examples of truthy values
console.log(Boolean(100)); // true
console.log(Boolean(3.14)); // true
console.log(Boolean(-15)); // true
console.log(Boolean("Hello")); // true
console.log(Boolean("false")); // true (it's a non-empty string)
console.log(Boolean({})); // true (empty object)
console.log(Boolean([])); // true (empty array)
console.log(Boolean(function(){})); // true (function)

如果一个值在布尔上下文中评估为 false,则该值被认为是 “falsy”(假值)。JavaScript 中只有少数几个 falsy 值:

  • 布尔值 false 本身。
  • 数字 0 (零)。
  • 数字 -0 (负零)。
  • BigInt 0n (零 BigInt)。
  • 空字符串 "" (或 '' 或 )。
  • null。
  • undefined。
  • NaN (非数字)。
// Examples of falsy values
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean(-0)); // false
console.log(Boolean(0n)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false

理解 truthy 和 falsy 值对于编写简洁正确的条件逻辑至关重要。

与数字和字符串类似,可以使用 new Boolean() 将布尔值创建为对象。但这通常是不推荐的。

const primitiveTrue = true;
const objectTrue = new Boolean(true);
console.log(typeof primitiveTrue); // "boolean"
console.log(typeof objectTrue); // "object"

一个 Boolean 对象,即使其值为 false(例如,new Boolean(false)),它本身也是一个对象,因此是 truthy 的。这可能导致条件语句中出现非常令人困惑的行为。

if (new Boolean(false)) {
console.log("This runs because new Boolean(false) is an object, which is truthy!");
}
始终直接使用原始布尔值(true 和 false)。避免使用 new Boolean()。

Boolean 属性和方法 (通过包装对象)

Section titled “Boolean 属性和方法 (通过包装对象)”

原始布尔值(true,false)没有属性或方法。但是,当你尝试访问它们的属性或方法时,JavaScript 会暂时将它们包装在一个 Boolean 对象中。这使得它们能够使用从 Boolean.prototype 继承的方法。

主要的方法有:

  • valueOf(): 返回 Boolean 对象的原始值。
  • toString(): 返回表示布尔值的字符串("true" 或 "false")。
const myBool = true;
console.log(myBool.toString()); // "true"
console.log(myBool.valueOf()); // true

实际上,你很少需要直接在布尔原始值上调用这些方法。

要全面理解布尔值、truthy/falsy 值和相关运算符,请查阅 MDN Web Docs 关于 JavaScript 布尔值和相等性比较的内容。