网站

JavaScript Boolean - W3School

Boolean - JavaScript | MDN

引入

学了 JS 布尔值 之后,知道 truefalse 是最基础的两个布尔值。

但在 JS 里,不只是 truefalse 才能在条件判断中使用。很多其他值也会被当成 truefalse,这就是所谓的真值假值Boolean() 函数可以帮我们看到一个值到底是真还是假。

正文

定义

定义

Boolean 对象可以把其他类型的值转换为布尔值。Boolean() 作为函数调用时返回布尔值,作为构造函数用 new 调用时返回布尔对象。

Boolean() 函数

Boolean() 作为普通函数调用时,把值转换为 truefalse

console.log(Boolean(1));
console.log(Boolean(0));
console.log(Boolean("hello"));
console.log(Boolean(""));
console.log(Boolean(null));
console.log(Boolean(undefined));

假值(Falsy)

以下值在布尔转换时会被当成 false

假值说明
false布尔值 false
0数字零
-0负零
""空字符串
null空值
undefined未定义
NaN非数字
console.log(Boolean(false));
console.log(Boolean(0));
console.log(Boolean(""));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean(NaN));

结果全是 false

真值(Truthy)

除了假值以外的所有值都是真值。

console.log(Boolean(1));
console.log(Boolean(-1));
console.log(Boolean("hello"));
console.log(Boolean(" "));
console.log(Boolean([]));
console.log(Boolean({}));
console.log(Boolean(function () {}));

结果全是 true

几个容易搞混的:

console.log(Boolean("0"));
console.log(Boolean("false"));
console.log(Boolean([]));
console.log(Boolean({}));

这些看起来像”空”或”假”的值,实际上都是真值。

  • "0" 是非空字符串 → true
  • "false" 是非空字符串 → true
  • [] 空数组 → true
  • {} 空对象 → true

不要用 new Boolean()

new Boolean() 创建的是对象,不是布尔值。

let a = new Boolean(false);
 
console.log(typeof a);
console.log(Boolean(a));

a 是一个对象,所有对象在布尔转换时都是 true

所以 new Boolean(false) 实际上是真值,这很容易出错。

正确做法:直接用 Boolean() 函数,不要加 new

let a = Boolean(false);
 
console.log(typeof a);
console.log(a);

在条件判断中的应用

条件语句会自动把条件值转换为布尔值。

let name = "Tom";
 
if (name) {
  console.log("有名字");
}

等价于:

if (Boolean(name)) {
  console.log("有名字");
}

常见的用法:检查变量是否有值。

let input = "";
 
if (input) {
  console.log("输入不为空");
} else {
  console.log("输入为空");
}
let user = null;
 
if (user) {
  console.log("用户存在");
} else {
  console.log("用户不存在");
}

逻辑运算符和布尔值

逻辑运算符 &&||! 也和布尔值密切相关。

console.log(!true);
console.log(!false);
console.log(!0);
console.log(!"");
console.log(!"hello");

! 会先把值转为布尔值,再取反。

!! 可以把任何值转为布尔值,效果和 Boolean() 一样。

console.log(!!1);
console.log(!!0);
console.log(!!"hello");
console.log(!!"");

常见写法

写法作用
Boolean(value)把值转为布尔值
!!value把值转为布尔值(简写)
if (value) {}判断值是否为真值
if (!value) {}判断值是否为假值

特点

  • Boolean() 是函数,返回布尔值
  • new Boolean() 是构造函数,返回布尔对象(不推荐)
  • 假值只有 7 个:false0-0""nullundefinedNaN
  • 其余所有值都是真值
  • 空数组 [] 和空对象 {} 都是真值
  • !!value 等价于 Boolean(value)

理解

可以把 Boolean() 理解为一个是非判断器

把一个值扔进去,它告诉你”有”还是”没有”。

数字 0 → 没有,其他数字 → 有。

空字符串 → 没有,非空字符串 → 有。

nullundefinedNaN → 没有。

最容易踩坑的是空数组和空对象,它们看起来像”空的”,但 JS 认为它们”有”。

实际开发中最常用的场景就是:if 里判断变量有没有值

引出

布尔值的真假判断和 JS 条件判断 直接相关,理解假值和真值可以让条件语句更简洁。

关于布尔值的基础知识,可以回顾 JS 布尔值