前端路由鉴权可以使用位运算实现,大大降低多种权限组合的复杂度。
const READ = 0b1 // 0001
const WRITE = 0b10 // 0010
const UPDATE = 0b100 // 0100
const DELETE = 0b1000 // 1000
那么此时 1101
就代表 DELETE、UPDATE、READ 权限。
或运算 进行权限组合
let p = READ | UPDATE | DELETE // 1101
与运算 进行权限验证
let response = 13
if (response & READ) {
console.log('可读')
}
异或 切换权限(原先有则删,没有则添加)
let response = 13
response ^= READ // response = response ^ READ
if (response & READ) {
console.log('可读')
}
与运算配合异或 删除某权限
let response = 13
if (response & READ) {
console.log('有权限,删')
response ^= READ
}
React的Lane模型也用到了位运算,使用 31 个 Lane,通过 位标志 来管理优先级。每个 lane 是一个 32 位整数的位,表示不同的优先级任务。
// Lane 常量
const SyncLane = 0b0000000000000000000000000000001; // 同步任务
const InputContinuousLane = 0b0000000000000000000000000000010; // 持续用户输入
const DefaultLane = 0b0000000000000000000000000000100; // 默认任务
// 合并不同 Lane
let lanes = SyncLane | InputContinuousLane; // 合并同步任务和用户输入任务
// 检查当前任务是否包含同步任务
if (lanes & SyncLane) {
console.log('当前任务包含同步任务');
}
// 清除同步任务
lanes &= ~SyncLane;