JavaScript布尔值

布尔值是JavaScript的基本数据类型之一,只有两个值:true(真)和false(假)。布尔值主要用于条件判断和逻辑运算。

布尔值的创建

直接赋值

javascript
const isActive = true;
const isDone = false;

Boolean构造函数

使用Boolean构造函数创建布尔值:

javascript
const isActive = new Boolean(true);
const isDone = new Boolean(false);

注意:使用构造函数创建的布尔值是对象,而不是基本数据类型:

javascript
const bool1 = true;
const bool2 = new Boolean(true);

console.log(typeof bool1); // boolean
console.log(typeof bool2); // object

布尔值转换

使用Boolean()函数将其他类型转换为布尔值:

javascript
console.log(Boolean(1)); // true
console.log(Boolean(0)); // false
console.log(Boolean("Hello")); // true
console.log(Boolean("")); // false
console.log(Boolean({})); // true
console.log(Boolean(null)); // false

真值和假值

在JavaScript中,所有值都可以转换为布尔值。转换为false的值称为假值(falsy),转换为true的值称为真值(truthy)。

假值列表

以下值在转换为布尔值时为false

  • false:布尔假值
  • 0:数字零
  • -0:负零
  • 0n:BigInt零
  • "":空字符串
  • null:空值
  • undefined:未定义值
  • NaN:不是数字
javascript
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false

真值列表

除了假值列表中的值,其他所有值都是真值:

  • 非零数字(如1-13.14
  • 非空字符串(如"Hello""false"
  • 对象(如{}[]
  • 函数(如function() {}
  • 符号(如Symbol()
javascript
console.log(Boolean(1)); // true
console.log(Boolean(-1)); // true
console.log(Boolean("Hello")); // true
console.log(Boolean("false")); // true(字符串"false"是真值)
console.log(Boolean({})); // true(空对象是真值)
console.log(Boolean([])); // true(空数组是真值)
console.log(Boolean(function() {})); // true(函数是真值)

逻辑运算符

JavaScript提供了三种逻辑运算符:&&(逻辑与)、||(逻辑或)和!(逻辑非)。

逻辑与(&&)

&&运算符返回第一个假值,如果所有操作数都是真值,则返回最后一个真值:

javascript
console.log(true && false); // false
console.log(false && true); // false
console.log(true && true); // true
console.log("Hello" && "World"); // "World"
console.log("Hello" && ""); // ""
console.log("" && "Hello"); // ""

&&运算符短路:如果第一个操作数是假值,则不会计算第二个操作数。

逻辑或(||)

||运算符返回第一个真值,如果所有操作数都是假值,则返回最后一个假值:

javascript
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
console.log("Hello" || "World"); // "Hello"
console.log("" || "Hello"); // "Hello"
console.log("Hello" || ""); // "Hello"

||运算符短路:如果第一个操作数是真值,则不会计算第二个操作数。

逻辑非(!)

!运算符将操作数转换为布尔值,然后取反:

javascript
console.log(!true); // false
console.log(!false); // true
console.log(!0); // true
console.log(!"Hello"); // false
console.log(!null); // true

使用双感叹号!!可以将值转换为布尔值:

javascript
console.log(!!true); // true
console.log(!!false); // false
console.log(!!0); // false
console.log(!!"Hello"); // true
console.log(!!null); // false

比较运算符

比较运算符返回布尔值,表示比较结果是否为真。

相等运算符

  • ==:相等(值相等)
  • !=:不相等
  • ===:严格相等(值和类型都相等)
  • !==:严格不相等
javascript
console.log(5 == "5"); // true
console.log(5 === "5"); // false

console.log(5 != "5"); // false
console.log(5 !== "5"); // true

关系运算符

  • <:小于
  • <=:小于等于
  • >:大于
  • >=:大于等于
javascript
console.log(5 < 10); // true
console.log(5 <= 10); // true
console.log(5 > 10); // false
console.log(5 >= 10); // false

条件语句

布尔值常用于条件语句中,控制程序的执行流程。

if语句

javascript
const age = 18;

if (age >= 18) {
    console.log("你是成年人");
}

if…else语句

javascript
const age = 16;

if (age >= 18) {
    console.log("你是成年人");
} else {
    console.log("你是未成年人");
}

三元运算符

javascript
const age = 18;
const status = age >= 18 ? "成年人" : "未成年人";
console.log(status); // "成年人"

布尔值的应用场景

条件判断

javascript
function greet(isMorning) {
    if (isMorning) {
        return "早上好";
    } else {
        return "下午好";
    }
}

console.log(greet(true)); // "早上好"
console.log(greet(false)); // "下午好"

默认值

使用||运算符设置默认值:

javascript
function greet(name) {
    name = name || "World";
    return "Hello, " + name + "!";
}

console.log(greet("John")); // "Hello, John!"
console.log(greet()); // "Hello, World!"

可选执行

使用&&运算符实现可选执行:

javascript
const user = {
    name: "John",
    age: 30,
    greet: function() {
        return "Hello, " + this.name + "!";
    }
};

user && user.greet && console.log(user.greet()); // "Hello, John!"

布尔值的最佳实践

  1. 使用严格相等运算符:优先使用===!==,避免隐式类型转换
  2. 明确转换为布尔值:使用Boolean()函数或!!运算符明确转换为布尔值
  3. 注意假值陷阱:了解假值列表,避免常见的陷阱(如空字符串、0、null、undefined、NaN)
  4. 使用描述性变量名:布尔变量名应该清晰表达其含义(如isActivehasPermission

常见问题

为什么"false"是真值?

因为"false"是一个非空字符串,所有非空字符串都是真值。

javascript
console.log(Boolean("false")); // true

为什么[]{}是真值?

因为空数组和空对象在JavaScript中是真值,即使它们不包含任何值。

javascript
console.log(Boolean([])); // true
console.log(Boolean({})); // true

为什么0 == ""是true?

因为==运算符会进行隐式类型转换。0转换为字符串是"0",但在比较0 == ""时,两者都会转换为数字:00

javascript
console.log(0 == ""); // true(隐式类型转换)
console.log(0 === ""); // false(严格相等,不进行类型转换)

继续学习:JavaScript null和undefined

最后更新:2026-02-08