【JS】可组合的散列数值

判定权限的场景下,如果给每个权限设置一个标识,后续判断会相当复杂。

const CREATE = 1
const DELETE = 2
const UPDATE = 3
const DETAIL = 4

不同用户的权限种类以及数量均不同,权限间各种组合的范围过大,不利于表达用户权限。

此时可以通过四位二进制表达是否拥有某项权限。

const CREATE = 0b0001
const DELETE = 0b0010
const UPDATE = 0b0100
const DETAIL = 0b1000

声明用户权限时,只需要二进制的或运算(上下两位任意为1则为1)。

const permissions = CREATE | DETAIL
console.log(permissions.toString(2)) // 1001

判断权限时,使用且运算(上下两位均为1则为1),所以当用户有该权限的话,用户权限 & 单个权限 === 单个权限

const CREATE = 0b0001
const DELETE = 0b0010
const UPDATE = 0b0100
const DETAIL = 0b1000

const permissions = CREATE | DETAIL
console.log(permissions.toString(2)) // 1001

const hasPermission = (permissions & DETAIL) === DETAIL
console.log(hasPermission) // true
const hasPermission1 = (permissions & DELETE) === DELETE
console.log(hasPermission1) // false

当需要从总权限中,删除某一权限,只需要进行 -运算

const permissions = CREATE | DETAIL
console.log(permissions.toString(2)) // 1001

const res = permissions - CREATE
console.log(res.toString(2)) // 1000

React中的fiberflex就是这么操作的,每一个fiber都会有后续操作的标记,如:替换、更新、删除…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田本初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值