react源码中二进制数值解惑

889 阅读2分钟

在学习 react 源码中有这样一段代码引起好奇心:

export const NoFlags = /*                      */ 0b00000000000000000000000;
export const PerformedWork = /*                */ 0b00000000000000000000001;

// You can change the rest (and add more).
export const Placement = /*                    */ 0b00000000000000000000010;
export const Update = /*                       */ 0b00000000000000000000100;
export const PlacementAndUpdate = /*           */ Placement | Update;
export const Deletion = /*                     */ 0b00000000000000000001000;
export const ChildDeletion = /*                */ 0b00000000000000000010000;
export const ContentReset = /*                 */ 0b00000000000000000100000;
export const Callback = /*                     */ 0b00000000000000001000000;
export const DidCapture = /*                   */ 0b00000000000000010000000;
export const Ref = /*                          */ 0b00000000000000100000000;
export const Snapshot = /*                     */ 0b00000000000001000000000;
export const Passive = /*                      */ 0b00000000000010000000000;
export const Hydrating = /*                    */ 0b00000000000100000000000;
export const HydratingAndUpdate = /*           */ Hydrating | Update;
export const Visibility = /*                   */ 0b00000000001000000000000;

看起来很高大上,二进制数据,其实很好理解,这样可以方便后面做权限的判断工作。举个例子:

let user = 0b00000000;
let Add = 0b00000001;//增加权限
let Delete = 0b00000010;//删除权限
let Modify = 0b00000100;//修改权限
let Search = 0b00001000;//搜索权限
user |= Add;//给用户赋予 增加权限
user&Add !== 0 //判断是否存在 增加权限
user ^= Add;//删除 增加权限 
user&Add !== 0 //判断是否存在 增加权限

是不是很方便判断了?