首先介绍一下 js 中的位运算:
1. "&" : 与运算, 转化为二进制数, 如果相同位数都为 1 则得结果为 1, 否则为 0;
2. "|" : 或运算, 转化为二进制数, 如果相同位数只要有一个为 1 则得结果为 1, 否则为 0;
3. "^" : 异或运算, 转化为二进制数, 如果相同位数不同则得结果为 1, 否则为 0;
4."<<" 异位运算符, 1<<1, 表示将 1 左移一位, 也就是 010, 在二进制中代表 2;
顺便说一下, 十进制数字互相转化.
十进制转为别的进制:
var num = 123;console.log(num.toString(2))console.log(num.toString(8))// 参数传想要转化的位数
别的进制转化为十进制:
var num = 110;console.log(parseInt(num,2))// 二进制转化为十进制
假设我们现在有 5 项权限, 在二进制中用 1 代表拥有权限, 0 代表不拥有. 所以 11111 这样代表拥有所有的五项权限, 那么我们如何知道用户是否有某一项具体权限呢.
比如, 我们现在想检测用户是否有第一项权限, 我们首先用过异位 1 << 0, 向左移 0 位, 还是 1, 然后 1 & (Math.pow(2,5) -1),
如果返回 0, 说明个位对不上, 也就是说我们当前没有权限, 如果返回 1, 说明我们拥有第一项权限, 同理, 如果需要检验第二位权限, 只需要异位 2 就好了.
if((1 << 0) & (Math.pow(2,5) - 1) !== 0){ // 拥有第一项权限权限}if((1 << 1) & (Math.pow(2,5) - 1) !== 0){ // 拥有第一项权限权限}
来源: http://www.92to.com/bangong/2018/08-17/34035388.html