位掩码通过将权限映射为独立二进制位,用位运算高效实现组合、检查与增删;权限常量需为2的幂(如1<<0、1<<1),确保互斥且可无冲突叠加。

用位掩码处理多选权限判断,核心是把每个权限映射为一个独立的二进制位,再用位运算一次性完成组合、检查、增删等操作。代码更短、逻辑更清晰、运行更快,尤其适合按钮显隐、菜单过滤、API 权限校验等场景。
定义权限常量:统一用左移确保互斥
每个权限必须是 2 的幂(即二进制只有一位为 1),推荐用 1 显式定义,避免硬编码出错:
const READ = 1 const WRITE = 1 const DELETE = 1 const ADMIN = 1
这样定义可读性强,也方便后续扩展(比如加 EXPORT = 1 )。
立即学习“Java免费学习笔记(深入)”;
判断是否拥有某项权限:用 & 配合非零检测
不要写 userPerm & READ === true(类型错误),也不要用 == 1(值不唯一):
- ✅ 正确写法:
!!(userPerm & READ)或(userPerm & READ) !== 0 - ❌ 错误写法:
userPerm & READ === true(结果是数字 1/0,不是布尔) - ✅ 多权限“全有”判断:
(userPerm & (READ | WRITE)) === (READ | WRITE) - ✅ 多权限“任一”判断:
!!(userPerm & (READ | DELETE))
动态更新权限:一行代码搞定增、删、切
无需 if 判断,直接用位运算原地修改:
- 添加权限:
userPerm |= WRITE; - 移除权限:
userPerm &= ~DELETE;(~取反后与操作清零特定位) - 切换权限(有则去,无则加):
userPerm ^= ADMIN;
这些操作都是原子级、无分支、无函数调用,性能极佳。
封装成工具函数:复用性更强
把常用逻辑抽成小函数,既保持简洁又提升可读性:
const hasPerm = (perms, flag) => !!(perms & flag);
const addPerm = (perms, flag) => perms | flag;
const removePerm = (perms, flag) => perms & ~flag;
const togglePerm = (perms, flag) => perms ^ flag;
使用示例:if (hasPerm(userPerm, READ)) { renderReadButton(); }


















