在学习 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 //判断是否存在 增加权限
是不是很方便判断了?