位运算管理权限通过2的幂常量映射权限位,用|合并、&判断、|=添加、&=~删除、^=切换,单整数存储高效无冗余。

用位运算管理权限状态,核心是把每个权限映射为一个独立的二进制位,再通过按位操作完成合并、判断和更新——不依赖对象遍历或数组查找,一次整数运算就能搞定。
定义权限常量:每个值必须是 2 的幂
确保每个权限对应唯一比特位,避免冲突。常用写法:
- READ = 1(二进制 0001)
- WRITE = 2(二进制 0010)
- UPDATE = 4(二进制 0100)
- DELETE = 8(二进制 1000)
也可以用左移更清晰地表达:const READ = 1 << 0;、const WRITE = 1 << 1;、const UPDATE = 1 << 2;……这样扩展性强,不易出错。
合并多个权限:用按位或(|)一次性叠加
用户同时拥有读+写+删除权限,直接用 | 连接常量:
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
let userPerm = READ | WRITE | DELETE;- 计算过程:
0001 | 0010 | 1000 = 1011(即十进制 11)
结果是一个整数,完整记录所有开启的权限位,体积小、无冗余字段,适合存 localStorage 或传给后端。
检查是否具备某权限:用按位与(&)判断位是否为 1
判断用户是否有写权限,只需:
if (userPerm & WRITE) { /* 有写权限 */ }- 原理:
1011 & 0010 = 0010(非零 → 真);若没有该权限,结果为 0(假)
这种判断是 CPU 级别指令,比 permissions.includes('write') 或对象属性访问快得多,且无需遍历。
动态增删权限:用 | 和 & ~ 组合操作
权限不是静态的,需要运行时调整:
-
添加权限:
userPerm |= UPDATE;(等价于userPerm = userPerm | UPDATE) -
移除权限:
userPerm &= ~DELETE;(~DELETE是取反,把 DELETE 对应位变 0,其余位保持不变) -
切换权限(有则删、无则加):
userPerm ^= WRITE;(异或特性:相同为 0,不同为 1)
所有操作都只作用于单个整数,无副作用,天然适合响应式框架(如 Vue 的 ref 或 React 的 useState)做状态更新。

















