二进制 1 = 1 2 = 01 3= 001
在vue\react中 有使用 <<、 >>、& 、| 的方式
这种可以用在求状态的需求下,或者对用户角色的判断

& and

01 11
10 10
结果
00 10
在位数都是1时 得到1,其余为0
eg: 判断是否时2的幂
n & (n-1) === 0 即: 设为16, 10000 与 01111 = 0 ; 设为15, 01111 与 1110 = 1110
2的幂
是否是 奇数: if(n & 1)

^ 异或

两个数不同,返回两数相加数,相同返回0
异或可以用来找一堆数据中 不相同的数,a^b^b === a^(b^b) 得到的结果是a
只出现一次的数

| or

当对一对数位执行位运算 OR 时,如果其中一位是 1 则返回 1:
image.png

<< 向左推

这是零填充的左移。一个或多个零数位从右被推入,最左侧的数位被移除
image.png

>> 向右推

这是保留符号的右移。最左侧的数位被从左侧推入,最右侧的数位被移出:
image.png

位运算 - 权限管理

  1. // vue
  2. let [STYLE, CLASS, IMG] = [1, 1 << 1, 1 << 2]
  3. //添加 授权
  4. let VNode = STYLE | CLASS;
  5. //判断
  6. console.log("包含STYLE属性?", !!(VNode & STYLE));
  7. console.log("包含CLASS属性?", !!(VNode & CLASS));
  8. console.log("包含IMG属性?", !!(VNode & IMG));
  9. // 删除
  10. VNode ^= CLASS
  11. console.log("包含CLASS属性?", !!(VNode & CLASS));