十六进制(0x)和二进制(0b)字面量是权限控制中表达位掩码的自然方式:二进制直观显示单个权限位分布,十六进制简化长权限组声明,硬编码角色权限矩阵提升可读性与安全性,并支持类型系统在编译期校验非法组合。

十六进制(0x)和二进制(0b)字面量在权限控制矩阵中不是炫技,而是精准表达位掩码的自然方式——每个 bit 对应一项权限,硬编码时可读性与逻辑清晰度远超十进制数字。
用二进制字面量直观看清权限位分布
权限本质是独立开关,用 0b 声明能一眼识别哪几位被启用:
-
const READ = 0b0001;→ 第 0 位(最低位)表示“读” -
const WRITE = 0b0010;→ 第 1 位表示“写” -
const EXECUTE = 0b0100;→ 第 2 位表示“执行” -
const DELETE = 0b1000;→ 第 3 位表示“删除”
组合权限如“读+写”即 0b0011,无需心算 1 | 2 === 3;调试时打印 userPerms.toString(2).padStart(4, '0') 也能直观比对。
用十六进制简化长位宽权限组声明
当权限项超过 8 个,二进制过长易错,十六进制兼顾紧凑与可解析性:
-
const GROUP_A = 0x000F;→ 低 4 位全开(对应前 4 项权限) -
const GROUP_B = 0xF000;→ 高 4 位全开(后 4 项) -
const ADMIN = 0xFFFF;→ 全部 16 项权限
每两位十六进制数对应一个字节,0xFF 比 0b11111111 更易书写和校验,尤其在嵌入式、协议字段或数据库 bitmask 字段定义中广泛使用。
硬编码权限矩阵:按角色预置位组合
不拼接、不运行时计算,直接用字面量定义角色能力集:
const ROLES = {
viewer: 0b00000001, // 只读
editor: 0b00000011, // 读 + 写
reviewer: 0b00000101, // 读 + 审核(假设第 2 位)
admin: 0xFFFFFFF0, // 所有高阶权限(除调试类)
};
校验用户是否具备某权限只需位与操作:(userFlags & READ) !== 0;判断是否含某角色集合:(userFlags & ROLES.editor) === ROLES.editor(严格包含)。
与类型系统协同强化安全(TypeScript 示例)
结合字面量类型约束,让非法权限组合在编译期报错:
type PermissionFlag = | 0b0001 | 0b0010 | 0b0100 | 0b1000 | 0b1011; // 显式允许的组合 const userPerm: PermissionFlag = 0b1011; // ✅ const badPerm: PermissionFlag = 0b1100; // ❌ TS error
再配合 as const 推导联合字面量类型,可让角色常量自动获得精确类型,避免运行时误赋非定义值。
位运算权限模型本身不复杂,但用对字面量形式,能让硬编码从“容易出错的魔法数字”变成“自解释的结构化契约”。











