位运算,平常工作中用的比较少, 但是不代表不重要,记录一下位运算的基本使用以及在权限控制方面的使用。现有的权限控制是数组来控制,但这种方式在某些场景下可能会显得笨重和低效。位运算提供了一种高效的处理多个状态或选项的方式。
规则
按位与
同为一则输出一,否则为零(&)
按位或
有一则一,无一则零(|)
异或
相同为零,不同为一(^)
按位非
按位取反(~)
权限控制举例
简单设置四个权限,增删改查(0b为二进制表示)
let permissions={
add:0b1,
delete:0b01,
update:0b100,
select:0b1000
}
给用户设置权限
let user={
permissions:permissions.add|permissions.delete|permissions.update|permissions.select
}
此时打印会发现user.permissions=15,转化为二进制则表示为0b1111
验证权限
以往的方法是后端返回权限数组,前端通过arr.includes(permission)来判断,通过位运算可以直接用按位与来验证
比如我们验证是否含有add权限
if (user.permissions&permissions.add) {
console.log('有添加权限');
}else{
console.log('没有添加权限');
}
如果有add权限,user.permissions&permissions.add的值会等于permission.add 的值,没有则为0
增加权限
直接按位或
user.permissions=user.permissions|permissions.select;
删除权限
直接异或(准确的说是修改权限,如果已有的权限会删除,没有的权限会添加)
console.log(user.permissions.toString(2))
user.permissions^=permissions.select;
console.log(user.permissions.toString(2))