位运算符可将多个布尔状态打包为一个整数实现轻量级状态管理:通过左移定义掩码,用|设置、&判断、&~清除、^切换状态,高效节省内存。

用位运算符把多个布尔状态打包成一个数字,是前端开发中轻量级状态管理的常用技巧。核心思路是把每个布尔值映射到二进制的一位(0 或 1),用一个整数统一存储,节省内存且读写高效。
状态定义与掩码准备
先为每个布尔状态分配唯一的位置(从右往左,位索引从 0 开始)。推荐用常量定义掩码,避免魔法数字:
const FLAG_A = 1 const FLAG_B = 1 const FLAG_C = 1 const FLAG_D = 1
这样每个掩码只有一位为 1,便于后续按位操作。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
打包:用按位或(|)设置状态
初始状态通常为 0。要开启某个状态,就和对应掩码做 | 运算(不影响其他位):
-
设置 A 和 C:
let flags = 0 | FLAG_A | FLAG_C;→ 得到0b0101(即 5) -
追加 B:
flags |= FLAG_B;→0b0111(7) - 重复执行
|=不会重复置位,安全可靠
读取:用按位与(&)判断状态
检查某一位是否为 1,只需和对应掩码做 &,结果非零即为 true:
-
是否启用 A:
!!(flags & FLAG_A)或(flags & FLAG_A) !== 0 -
是否启用 B 和 C 同时成立:
(flags & (FLAG_B | FLAG_C)) === (FLAG_B | FLAG_C) - 注意不要直接用
if (flags & FLAG_X),因为结果是数字(如 2),在 if 中虽能转布尔,但显式转换更清晰
清除与切换:按位与非(&~)和异或(^)
关闭某个状态用 &~(与该位取反的掩码相与);翻转用 ^:
-
关闭 C:
flags &= ~FLAG_C;(~FLAG_C是除第 2 位外全为 1 的数) -
切换 A 状态:
flags ^= FLAG_A;(0→1,1→0) - 清除多个状态可组合掩码:
flags &= ~(FLAG_B | FLAG_D);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










