js位操作权限控制的核心是将权限映射为2的幂次二进制位,用&判断、|添加、&~移除、^切换、&联合验证多权限。

用 JS 位操作符做权限控制,核心是把每个权限当作一个独立的二进制位,通过 &(与)、|(或)、~(非)、(左移)等操作快速判断、添加、移除权限。
定义权限常量
每个权限对应一个唯一的 2 的幂次值,确保各权限在二进制中只占一位,互不干扰:
// 权限常量(推荐用 const + 大写命名)
const READ = 1 // 0b0001
const WRITE = 2 // 0b0010
const DELETE = 4 // 0b0100
const ADMIN = 8 // 0b1000
判断是否拥有某权限
用按位与 & 检查目标位是否为 1:
- 如果
userPermissions & READ结果非 0,说明有读权限 - 注意:不能直接用
== true判断,因为结果是数字(如 1、4),应写成!!(userPermissions & READ)或(userPermissions & READ) !== 0 - 例如:
const userPermissions = READ | WRITE; // 0b0011 = 3console.log(!!(userPermissions & READ)); // trueconsole.log(!!(userPermissions & DELETE)); // false
添加或移除权限
添加用按位或 |,移除用按位与 & 加取反:
- 添加权限:
userPermissions |= WRITE;(等价于userPermissions = userPermissions | WRITE) - 移除权限:
userPermissions &= ~DELETE;(~DELETE是~4 → 0b1111...1011,与之相与可清零第 3 位) - 切换权限(有则删、无则加):
userPermissions ^= ADMIN;(异或特性:相同为 0,不同为 1)
批量检查多个权限
可以一次性验证是否同时具备多个权限:
- 是否同时有读和写:
(userPermissions & (READ | WRITE)) === (READ | WRITE) - 是否至少有一个权限:
!!(userPermissions & (READ | DELETE)) - 注意:不要写成
userPermissions & READ & WRITE,这是错误的链式与(会先算userPermissions & READ,再跟WRITE与)











