JavaScript Boolean(布尔)

Boolean(布尔)是只有两个值的类型:true(真)和 false(假),专门用来表示"是/否、开/关、成立/不成立"。它是条件判断 if、循环 while、逻辑运算的基础——没有布尔,程序就无法做任何分支决策。本节不仅讲 true/false,更要讲清 JS 独特的"真值/假值"转换规则。

布尔值只有两个

直接写 true 或 false,也可以把布尔当对象来 new,但日常直接用字面量:

let isOK = true;
let isDone = false;
console.log(typeof true);   // 输出:boolean
console.log(3 > 2);         // 输出:true,比较运算的结果就是布尔
console.log(3 < 2);         // 输出:false
console.log(isOK);          // 输出:true

布尔字面量必须小写,写 True/False 会报错(那是 Python 的写法)。

假值清单:哪些值等于 false

条件判断里,下面的"假值"会被当成 false,其余一切值都是"真值":

// 六个假值:false、0、""(空串)、null、undefined、NaN
if (0) { console.log("不会执行"); }
if ("") { console.log("不会执行"); }
if (null) { console.log("不会执行"); }
if (undefined) { console.log("不会执行"); }
if (NaN) { console.log("不会执行"); }
if (0.5) { console.log("会执行"); }   // 输出:会执行,非 0 数字是真值
if ("hi") { console.log("会执行"); }  // 输出:会执行,非空串是真值
if ([]) { console.log("会执行"); }    // 输出:会执行,空数组也是真值!

容易记错的两点:空数组 [] 和空对象 {} 都是真值;只有空字符串 "" 才是假值。

Boolean() 与 !! 双重取反

需要把任意值"翻译"成布尔时,用 Boolean() 函数;!! 是它的简写:

console.log(Boolean("hello"));  // 输出:true
console.log(Boolean(0));        // 输出:false
console.log(Boolean([]));       // 输出:true,空数组也是 true
console.log(!!"hello");         // 输出:true,!! 相当于 Boolean()
console.log(!!0);               // 输出:false
let userInput = "";
console.log(Boolean(userInput) ? "有内容" : "空的"); // 输出:空的

写表单校验时,Boolean(value) 或 !!value 常用来判断输入框是否为空。

new Boolean(false) 是个坑

用 new Boolean(false) 造出来的是"对象",而对象永远是真值,判断会反直觉:

let b = new Boolean(false);
console.log(b);            // 输出:[Boolean: false]
console.log(Boolean(b));   // 输出:true!对象是真值
if (b) { console.log("条件成立"); } // 输出:条件成立,尽管里面是 false
let ok = false;            // 直接用字面量就完全没有这个问题
if (ok) { console.log("不执行"); }

结论:永远不要 new Boolean(),老老实实用字面量 true/false。

逻辑运算:&& 、|| 与 !

! 取反;&& 两边都真才真;|| 两边一个真就真;它们还都有"短路"特性,返回的未必是布尔:

console.log(!true);                  // 输出:false
console.log(true && false);          // 输出:false
console.log(true || false);          // 输出:true
console.log(1 && "a");               // 输出:a(都真,返回最后一个值)
console.log(0 || "默认值");           // 输出:默认值(左边假,返回右边)
console.log("hi" || "默认值");        // 输出:hi(左边真,短路不再看右边)

短路特性常用于"取默认值":let name = user.name || "匿名"; 当 user.name 为空时自动落到默认值。

小结:布尔只有 true/false 两个值;记住 0、""、null、undefined、NaN、false 六个假值,其余皆真;用 Boolean() 或 !! 做显式转换,避免 new Boolean();&&、|| 的短路求值既能做判断,也能优雅地给变量取默认值。

笔记加载中…